Read in the packages. The working directory is wherever the R Notebook is located.

Read in the spreadsheet and take a look at the data.

###read in spreadsheet
loc <- read_xlsx("Original-spreadsheets/all species New_6-14-19.xlsx") %>% 
  janitor::clean_names() %>% 
  mutate(reproductive_mode = as.factor(reproductive_mode)) 

#get the number of individuals, and the sexuality counts per species
count_repro_mode <- loc %>% 
  group_by(genus, species, reproductive_mode) %>% 
  dplyr::count() %>% 
  mutate(genus_species = str_c(genus, species, sep = "_"),
         genus_species = str_replace_all(genus_species, " ", "_"),
         genus_species = str_replace_all(genus_species, "\\.", "")) %>% 
  ungroup() %>% 
  mutate(genus_species = fct_reorder(genus_species, n, sum)) %>% 
  ggplot(aes(x = genus_species, y = n, fill = reproductive_mode)) +
  geom_col() +
  coord_flip() + 
  theme_minimal()

count_repro_mode

##Map Plot a leaflet map of the localities. The leaflet map is interactive. You can click on the localities and a flag with some metadata will pop up!

#make locality shape file and assign WGS coord system
coord_points <- st_as_sf(loc, coords = c("longitude", "latitude"), 
                         crs = 4326, agr = "constant")

#use sourced plot_locs_leaflet script to plot localities
all_plot <- plot_locs_leaflet(loc, "reproductive_mode")
Assuming "longitude" and "latitude" are longitude and latitude, respectively
all_plot

#in case I want to save the map somewhere
#mapview::mapshot(all_plot, url = paste0(getwd(), "/plots/repro_mode_plots/all_species_map.html"), file = paste0(getwd(), "/plots/repro_mode_plots/all_species_map.pdf"))

PCA-Genera

PCA by locality

This is a PCA of the climate data extracted for each locality, rather than a PCA of the total climate space.

Run the pca and check out variable loadings and proportion of variance explained by components.

Importance of components:
                          PC1    PC2     PC3     PC4     PC5     PC6     PC7
Standard deviation     2.9511 2.4947 1.36934 1.02403 0.80149 0.54359 0.32182
Proportion of Variance 0.4584 0.3276 0.09869 0.05519 0.03381 0.01555 0.00545
Cumulative Proportion  0.4584 0.7859 0.88462 0.93981 0.97362 0.98917 0.99462
                           PC8     PC9    PC10    PC11    PC12    PC13
Standard deviation     0.24972 0.11677 0.10148 0.08340 0.05671 0.04746
Proportion of Variance 0.00328 0.00072 0.00054 0.00037 0.00017 0.00012
Cumulative Proportion  0.99790 0.99862 0.99916 0.99953 0.99970 0.99982
                          PC14    PC15    PC16    PC17    PC18    PC19
Standard deviation     0.03910 0.03147 0.02392 0.01408 0.01153 0.00911
Proportion of Variance 0.00008 0.00005 0.00003 0.00001 0.00001 0.00000
Cumulative Proportion  0.99990 0.99995 0.99998 0.99999 1.00000 1.00000
PC1 PC2 PC3
chelsa_bioclims_NZ.1 -0.301 0.148 0.174
chelsa_bioclims_NZ.2 -0.285 0.143 0.276
chelsa_bioclims_NZ.3 -0.310 0.142 0.097
chelsa_bioclims_NZ.4 -0.150 -0.358 0.010
chelsa_bioclims_NZ.5 -0.189 -0.327 0.024
chelsa_bioclims_NZ.6 -0.135 -0.362 -0.003
chelsa_bioclims_NZ.7 -0.169 0.136 0.089
chelsa_bioclims_NZ.8 -0.188 -0.328 0.031
chelsa_bioclims_NZ.9 -0.130 -0.365 -0.006
chelsa_bioclims_NZ.10 -0.119 -0.361 -0.036
chelsa_bioclims_NZ.11 -0.214 -0.280 0.094
chelsa_bioclims_NZ.12 0.277 -0.106 0.360
chelsa_bioclims_NZ.13 0.261 -0.105 0.306
chelsa_bioclims_NZ.14 0.248 -0.083 0.383
chelsa_bioclims_NZ.15 -0.219 0.123 0.492
chelsa_bioclims_NZ.16 -0.314 0.143 0.009
chelsa_bioclims_NZ.17 0.272 -0.106 0.380
chelsa_bioclims_NZ.18 -0.167 0.128 -0.084
chelsa_bioclims_NZ.19 -0.247 0.100 0.317

Two plots: One plot of the PCA colored according to genus, with convex hulls surrounding the genera. It looks like this reflects a latitudinal gradient in temperature! You can interact with the PCA plot by clicking on points to view associated metadata. You can isolate the genus you want to view by double clicking the genus in the legend! You can also remove a genus by clicking on it once. There’s some other functionality you can explore in the toolbar at the top of the plot. The second plot is a PCA colored according to reproductive mode. It looks like asexual populations occupy slightly larger niche space, but both reproductive modes have a similar niche center.

Ignoring unknown aesthetics: text

Ignoring unknown aesthetics: text

PCA-Species

These are PCAs of environmental space for species within genera. Each climate PCA is of localities for a single genus, colored by species. I’m doing this even for genera with one species, so it’s easy to see if certain localities group together.

Acanthoxyla

Ignoring unknown aesthetics: text

Assuming "longitude" and "latitude" are longitude and latitude, respectively

Importance of components:
                          PC1    PC2    PC3     PC4     PC5     PC6     PC7
Standard deviation     2.8059 2.5135 1.7771 0.88976 0.66876 0.44564 0.36423
Proportion of Variance 0.4144 0.3325 0.1662 0.04167 0.02354 0.01045 0.00698
Cumulative Proportion  0.4144 0.7469 0.9131 0.95475 0.97829 0.98874 0.99573
                           PC8    PC9    PC10    PC11    PC12    PC13
Standard deviation     0.22139 0.1064 0.09506 0.06761 0.05169 0.03848
Proportion of Variance 0.00258 0.0006 0.00048 0.00024 0.00014 0.00008
Cumulative Proportion  0.99831 0.9989 0.99938 0.99962 0.99976 0.99984
                          PC14    PC15    PC16    PC17    PC18    PC19
Standard deviation     0.03336 0.02780 0.02371 0.01891 0.01400 0.01128
Proportion of Variance 0.00006 0.00004 0.00003 0.00002 0.00001 0.00001
Cumulative Proportion  0.99989 0.99993 0.99996 0.99998 0.99999 1.00000
PC1 PC2 PC3
chelsa_bioclims_NZ.1 -0.266 -0.230 0.170
chelsa_bioclims_NZ.2 -0.238 -0.200 0.297
chelsa_bioclims_NZ.3 -0.277 -0.240 0.056
chelsa_bioclims_NZ.4 0.262 -0.267 0.039
chelsa_bioclims_NZ.5 0.236 -0.288 0.068
chelsa_bioclims_NZ.6 0.268 -0.258 0.015
chelsa_bioclims_NZ.7 -0.192 -0.051 0.217
chelsa_bioclims_NZ.8 0.239 -0.286 0.073
chelsa_bioclims_NZ.9 0.269 -0.256 0.012
chelsa_bioclims_NZ.10 0.272 -0.249 -0.011
chelsa_bioclims_NZ.11 0.191 -0.283 0.148
chelsa_bioclims_NZ.12 0.219 0.232 0.285
chelsa_bioclims_NZ.13 0.232 0.246 0.151
chelsa_bioclims_NZ.14 0.128 0.138 0.463
chelsa_bioclims_NZ.15 -0.150 -0.097 0.477
chelsa_bioclims_NZ.16 -0.278 -0.245 -0.034
chelsa_bioclims_NZ.17 0.197 0.197 0.370
chelsa_bioclims_NZ.18 -0.074 -0.304 -0.109
chelsa_bioclims_NZ.19 -0.246 -0.049 0.321

Argosarchus

Ignoring unknown aesthetics: text

Assuming "longitude" and "latitude" are longitude and latitude, respectively

Importance of components:
                          PC1    PC2    PC3     PC4     PC5     PC6     PC7
Standard deviation     2.8508 2.4341 1.6389 1.09192 0.76813 0.51507 0.35817
Proportion of Variance 0.4277 0.3118 0.1414 0.06275 0.03105 0.01396 0.00675
Cumulative Proportion  0.4277 0.7396 0.8809 0.94367 0.97473 0.98869 0.99544
                          PC8     PC9    PC10    PC11    PC12    PC13
Standard deviation     0.2222 0.10883 0.10035 0.08126 0.05441 0.04318
Proportion of Variance 0.0026 0.00062 0.00053 0.00035 0.00016 0.00010
Cumulative Proportion  0.9980 0.99866 0.99919 0.99954 0.99970 0.99980
                          PC14    PC15    PC16    PC17    PC18    PC19
Standard deviation     0.03895 0.03285 0.02417 0.01722 0.01643 0.01134
Proportion of Variance 0.00008 0.00006 0.00003 0.00002 0.00001 0.00001
Cumulative Proportion  0.99988 0.99993 0.99996 0.99998 0.99999 1.00000
PC1 PC2 PC3
chelsa_bioclims_NZ.1 -0.266 -0.227 -0.182
chelsa_bioclims_NZ.2 -0.241 -0.208 -0.293
chelsa_bioclims_NZ.3 -0.279 -0.228 -0.110
chelsa_bioclims_NZ.4 -0.225 0.312 -0.037
chelsa_bioclims_NZ.5 -0.257 0.272 -0.023
chelsa_bioclims_NZ.6 -0.202 0.330 -0.026
chelsa_bioclims_NZ.7 -0.141 -0.175 0.021
chelsa_bioclims_NZ.8 -0.255 0.275 -0.033
chelsa_bioclims_NZ.9 -0.197 0.334 -0.030
chelsa_bioclims_NZ.10 -0.176 0.347 0.013
chelsa_bioclims_NZ.11 -0.277 0.219 -0.090
chelsa_bioclims_NZ.12 0.266 0.149 -0.318
chelsa_bioclims_NZ.13 0.267 0.108 -0.280
chelsa_bioclims_NZ.14 0.227 0.162 -0.310
chelsa_bioclims_NZ.15 -0.113 -0.143 -0.516
chelsa_bioclims_NZ.16 -0.291 -0.224 -0.009
chelsa_bioclims_NZ.17 0.258 0.163 -0.324
chelsa_bioclims_NZ.18 -0.098 -0.073 0.247
chelsa_bioclims_NZ.19 -0.191 -0.155 -0.384

Now I’m going to to environmental niche factor analysis between sexual and asexual populations within the species.

A couple different ways to visualize the environmental variation. 1) Scatterplot visualizations of marginality vs axis 1 of the specialization with the labels removed (they make things indiscernable). Red = occupied e-space. Gray = Background e-space. 2) ENFA histogram visualizations of marginality and specialization axes. 3) PCA of total e-space with colors corresponding to sexual vs. asexual populations.

binding character and factor vector, coercing into character vector

Asteliaphasma

Ignoring unknown aesthetics: text

Assuming "longitude" and "latitude" are longitude and latitude, respectively

Importance of components:
                         PC1    PC2     PC3     PC4     PC5     PC6     PC7
Standard deviation     3.104 2.4714 1.27720 0.87566 0.76781 0.38573 0.19883
Proportion of Variance 0.507 0.3215 0.08586 0.04036 0.03103 0.00783 0.00208
Cumulative Proportion  0.507 0.8284 0.91427 0.95463 0.98566 0.99349 0.99557
                           PC8    PC9    PC10    PC11    PC12    PC13
Standard deviation     0.16377 0.1382 0.10580 0.09487 0.09187 0.06475
Proportion of Variance 0.00141 0.0010 0.00059 0.00047 0.00044 0.00022
Cumulative Proportion  0.99698 0.9980 0.99858 0.99905 0.99949 0.99971
                          PC14    PC15    PC16    PC17    PC18    PC19
Standard deviation     0.04986 0.03308 0.03192 0.02037 0.01726 0.01092
Proportion of Variance 0.00013 0.00006 0.00005 0.00002 0.00002 0.00001
Cumulative Proportion  0.99984 0.99990 0.99996 0.99998 0.99999 1.00000
PC1 PC2 PC3
chelsa_bioclims_NZ.1 -0.298 -0.090 -0.229
chelsa_bioclims_NZ.2 -0.288 -0.043 -0.320
chelsa_bioclims_NZ.3 -0.298 -0.118 -0.173
chelsa_bioclims_NZ.4 0.198 -0.312 -0.110
chelsa_bioclims_NZ.5 0.134 -0.357 -0.040
chelsa_bioclims_NZ.6 0.209 -0.281 -0.137
chelsa_bioclims_NZ.7 -0.167 -0.205 0.152
chelsa_bioclims_NZ.8 0.143 -0.352 -0.071
chelsa_bioclims_NZ.9 0.214 -0.276 -0.148
chelsa_bioclims_NZ.10 0.187 -0.284 -0.161
chelsa_bioclims_NZ.11 0.164 -0.334 -0.085
chelsa_bioclims_NZ.12 0.250 0.211 -0.238
chelsa_bioclims_NZ.13 0.230 0.192 -0.354
chelsa_bioclims_NZ.14 0.266 0.202 -0.053
chelsa_bioclims_NZ.15 -0.103 0.170 -0.654
chelsa_bioclims_NZ.16 -0.295 -0.154 -0.044
chelsa_bioclims_NZ.17 0.257 0.216 -0.192
chelsa_bioclims_NZ.18 -0.297 -0.125 -0.157
chelsa_bioclims_NZ.19 -0.211 -0.027 -0.154

Now I’m going to to environmental niche factor analysis between sexual and asexual populations within the species.

no non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Inf

A couple different ways to visualize the environmental variation. 1) Scatterplot visualizations of marginality vs axis 1 of the specialization with the labels removed (they make things indiscernable). Red = occupied e-space. Gray = Background e-space. 2) ENFA histogram visualizations of marginality and specialization axes. 3) PCA of total e-space with colors corresponding to sexual vs. asexual populations.

binding character and factor vector, coercing into character vector

Clitarchus

Ignoring unknown aesthetics: text

Assuming "longitude" and "latitude" are longitude and latitude, respectively

Importance of components:
                          PC1    PC2     PC3     PC4    PC5     PC6     PC7
Standard deviation     3.1671 2.2063 1.37300 1.10390 0.7268 0.47246 0.36559
Proportion of Variance 0.5279 0.2562 0.09922 0.06414 0.0278 0.01175 0.00703
Cumulative Proportion  0.5279 0.7841 0.88333 0.94747 0.9753 0.98702 0.99405
                           PC8     PC9    PC10    PC11    PC12    PC13
Standard deviation     0.22448 0.15341 0.12224 0.09218 0.07237 0.06626
Proportion of Variance 0.00265 0.00124 0.00079 0.00045 0.00028 0.00023
Cumulative Proportion  0.99670 0.99794 0.99873 0.99918 0.99945 0.99968
                          PC14    PC15    PC16    PC17    PC18    PC19
Standard deviation     0.04930 0.04095 0.03351 0.01839 0.01746 0.01160
Proportion of Variance 0.00013 0.00009 0.00006 0.00002 0.00002 0.00001
Cumulative Proportion  0.99981 0.99990 0.99996 0.99998 0.99999 1.00000
PC1 PC2 PC3
chelsa_bioclims_NZ.1 -0.277 -0.151 0.244
chelsa_bioclims_NZ.2 -0.267 -0.106 0.338
chelsa_bioclims_NZ.3 -0.281 -0.172 0.173
chelsa_bioclims_NZ.4 -0.224 0.311 -0.091
chelsa_bioclims_NZ.5 -0.245 0.256 -0.157
chelsa_bioclims_NZ.6 -0.215 0.312 -0.002
chelsa_bioclims_NZ.7 -0.133 -0.109 -0.294
chelsa_bioclims_NZ.8 -0.245 0.260 -0.147
chelsa_bioclims_NZ.9 -0.213 0.316 -0.013
chelsa_bioclims_NZ.10 -0.216 0.294 -0.001
chelsa_bioclims_NZ.11 -0.233 0.274 -0.139
chelsa_bioclims_NZ.12 0.234 0.245 0.241
chelsa_bioclims_NZ.13 0.231 0.232 0.203
chelsa_bioclims_NZ.14 0.205 0.262 0.271
chelsa_bioclims_NZ.15 -0.182 0.018 0.577
chelsa_bioclims_NZ.16 -0.280 -0.203 0.071
chelsa_bioclims_NZ.17 0.228 0.259 0.266
chelsa_bioclims_NZ.18 -0.192 -0.204 0.060
chelsa_bioclims_NZ.19 -0.204 -0.043 0.227

Now I’m going to to environmental niche factor analysis between sexual and asexual populations within the species.

A couple different ways to visualize the environmental variation. 1) Scatterplot visualizations of marginality vs axis 1 of the specialization with the labels removed (they make things indiscernable). Red = occupied e-space. Gray = Background e-space. 2) ENFA histogram visualizations of marginality and specialization axes. 3) PCA of total e-space with colors corresponding to sexual vs. asexual populations.

binding character and factor vector, coercing into character vector

Micrarchus

Ignoring unknown aesthetics: text

Assuming "longitude" and "latitude" are longitude and latitude, respectively

Importance of components:
                          PC1    PC2     PC3     PC4     PC5    PC6     PC7
Standard deviation     3.4431 2.0743 1.31392 0.94676 0.29817 0.2263 0.20567
Proportion of Variance 0.6239 0.2265 0.09086 0.04718 0.00468 0.0027 0.00223
Cumulative Proportion  0.6239 0.8504 0.94126 0.98843 0.99311 0.9958 0.99803
                           PC8     PC9    PC10    PC11    PC12    PC13
Standard deviation     0.13292 0.09179 0.08909 0.03357 0.02983 0.02512
Proportion of Variance 0.00093 0.00044 0.00042 0.00006 0.00005 0.00003
Cumulative Proportion  0.99896 0.99941 0.99983 0.99988 0.99993 0.99996
                          PC14    PC15    PC16     PC17     PC18     PC19
Standard deviation     0.01449 0.01179 0.01068 0.009585 0.008206 0.007186
Proportion of Variance 0.00001 0.00001 0.00001 0.000000 0.000000 0.000000
Cumulative Proportion  0.99998 0.99998 0.99999 0.999990 1.000000 1.000000
PC1 PC2 PC3
chelsa_bioclims_NZ.1 0.268 0.116 -0.222
chelsa_bioclims_NZ.2 0.266 0.086 -0.270
chelsa_bioclims_NZ.3 0.268 0.143 -0.178
chelsa_bioclims_NZ.4 -0.242 0.257 -0.101
chelsa_bioclims_NZ.5 -0.237 0.254 -0.107
chelsa_bioclims_NZ.6 -0.239 0.251 -0.153
chelsa_bioclims_NZ.7 0.145 -0.116 -0.015
chelsa_bioclims_NZ.8 -0.237 0.254 -0.118
chelsa_bioclims_NZ.9 -0.239 0.253 -0.144
chelsa_bioclims_NZ.10 -0.240 0.250 -0.147
chelsa_bioclims_NZ.11 -0.229 0.252 -0.102
chelsa_bioclims_NZ.12 -0.167 -0.323 -0.354
chelsa_bioclims_NZ.13 -0.140 -0.310 -0.429
chelsa_bioclims_NZ.14 -0.195 -0.325 -0.202
chelsa_bioclims_NZ.15 0.247 0.004 -0.397
chelsa_bioclims_NZ.16 0.268 0.170 -0.110
chelsa_bioclims_NZ.17 -0.190 -0.311 -0.294
chelsa_bioclims_NZ.18 0.210 0.226 -0.306
chelsa_bioclims_NZ.19 0.267 0.119 -0.185

Niveaphasma

Ignoring unknown aesthetics: text

Assuming "longitude" and "latitude" are longitude and latitude, respectively

Importance of components:
                          PC1    PC2    PC3     PC4     PC5     PC6     PC7
Standard deviation     2.9922 2.4493 1.5457 0.94013 0.73205 0.39659 0.24024
Proportion of Variance 0.4712 0.3157 0.1258 0.04652 0.02821 0.00828 0.00304
Cumulative Proportion  0.4712 0.7870 0.9127 0.95923 0.98743 0.99571 0.99875
                           PC8     PC9    PC10    PC11    PC12    PC13
Standard deviation     0.11345 0.06508 0.04982 0.04382 0.02749 0.02222
Proportion of Variance 0.00068 0.00022 0.00013 0.00010 0.00004 0.00003
Cumulative Proportion  0.99943 0.99965 0.99978 0.99988 0.99992 0.99995
                          PC14    PC15    PC16    PC17     PC18     PC19
Standard deviation     0.01856 0.01631 0.01216 0.01109 0.008331 0.006935
Proportion of Variance 0.00002 0.00001 0.00001 0.00001 0.000000 0.000000
Cumulative Proportion  0.99997 0.99998 0.99999 0.99999 1.000000 1.000000
PC1 PC2 PC3
chelsa_bioclims_NZ.1 0.091 0.374 0.184
chelsa_bioclims_NZ.2 -0.002 0.341 0.347
chelsa_bioclims_NZ.3 0.156 0.358 0.053
chelsa_bioclims_NZ.4 0.297 -0.154 0.159
chelsa_bioclims_NZ.5 0.294 -0.151 0.172
chelsa_bioclims_NZ.6 0.297 -0.158 0.135
chelsa_bioclims_NZ.7 -0.196 0.021 0.110
chelsa_bioclims_NZ.8 0.296 -0.143 0.177
chelsa_bioclims_NZ.9 0.298 -0.158 0.146
chelsa_bioclims_NZ.10 0.300 -0.143 0.132
chelsa_bioclims_NZ.11 0.313 -0.119 0.116
chelsa_bioclims_NZ.12 -0.234 -0.233 0.274
chelsa_bioclims_NZ.13 -0.216 -0.203 0.338
chelsa_bioclims_NZ.14 -0.241 -0.238 0.233
chelsa_bioclims_NZ.15 -0.119 0.211 0.496
chelsa_bioclims_NZ.16 0.176 0.346 -0.012
chelsa_bioclims_NZ.17 -0.234 -0.243 0.252
chelsa_bioclims_NZ.18 -0.171 0.256 0.192
chelsa_bioclims_NZ.19 0.116 0.151 0.289

Now I’m going to to environmental niche factor analysis between sexual and asexual populations within the species.

A couple different ways to visualize the environmental variation. 1) Scatterplot visualizations of marginality vs axis 1 of the specialization with the labels removed (they make things indiscernable). Red = occupied e-space. Gray = Background e-space. 2) ENFA histogram visualizations of marginality and specialization axes. 3) PCA of total e-space with colors corresponding to sexual vs. asexual populations.

binding character and factor vector, coercing into character vector

Spinotectarchus

Ignoring unknown aesthetics: text

Assuming "longitude" and "latitude" are longitude and latitude, respectively

Importance of components:
                          PC1    PC2     PC3     PC4     PC5    PC6     PC7
Standard deviation     3.2696 2.2078 1.34284 0.86560 0.74380 0.4655 0.17853
Proportion of Variance 0.5626 0.2566 0.09491 0.03944 0.02912 0.0114 0.00168
Cumulative Proportion  0.5626 0.8192 0.91410 0.95354 0.98265 0.9941 0.99573
                           PC8     PC9    PC10    PC11    PC12    PC13
Standard deviation     0.16747 0.12847 0.11756 0.10182 0.07402 0.05291
Proportion of Variance 0.00148 0.00087 0.00073 0.00055 0.00029 0.00015
Cumulative Proportion  0.99721 0.99808 0.99881 0.99935 0.99964 0.99979
                          PC14    PC15    PC16    PC17    PC18    PC19
Standard deviation     0.04093 0.03100 0.02372 0.02118 0.01686 0.01123
Proportion of Variance 0.00009 0.00005 0.00003 0.00002 0.00001 0.00001
Cumulative Proportion  0.99987 0.99993 0.99995 0.99998 0.99999 1.00000
PC1 PC2 PC3
chelsa_bioclims_NZ.1 -0.279 -0.110 -0.223
chelsa_bioclims_NZ.2 -0.273 -0.057 -0.289
chelsa_bioclims_NZ.3 -0.277 -0.148 -0.178
chelsa_bioclims_NZ.4 0.243 -0.262 -0.126
chelsa_bioclims_NZ.5 0.199 -0.325 -0.112
chelsa_bioclims_NZ.6 0.246 -0.230 -0.070
chelsa_bioclims_NZ.7 -0.133 -0.273 -0.032
chelsa_bioclims_NZ.8 0.209 -0.314 -0.127
chelsa_bioclims_NZ.9 0.254 -0.217 -0.106
chelsa_bioclims_NZ.10 0.231 -0.236 -0.144
chelsa_bioclims_NZ.11 0.215 -0.303 -0.135
chelsa_bioclims_NZ.12 0.199 0.273 -0.319
chelsa_bioclims_NZ.13 0.174 0.242 -0.434
chelsa_bioclims_NZ.14 0.225 0.267 -0.030
chelsa_bioclims_NZ.15 -0.165 0.138 -0.579
chelsa_bioclims_NZ.16 -0.274 -0.193 -0.055
chelsa_bioclims_NZ.17 0.217 0.281 -0.234
chelsa_bioclims_NZ.18 -0.272 -0.164 -0.178
chelsa_bioclims_NZ.19 -0.206 -0.046 -0.140

Tectarchus

Ignoring unknown aesthetics: text

Assuming "longitude" and "latitude" are longitude and latitude, respectively

Importance of components:
                          PC1    PC2    PC3     PC4     PC5     PC6     PC7
Standard deviation     2.8210 2.5950 1.6213 0.97360 0.59328 0.41536 0.34340
Proportion of Variance 0.4188 0.3544 0.1383 0.04989 0.01853 0.00908 0.00621
Cumulative Proportion  0.4188 0.7733 0.9116 0.96150 0.98002 0.98910 0.99531
                           PC8     PC9    PC10    PC11    PC12    PC13
Standard deviation     0.23982 0.11480 0.08517 0.06494 0.04977 0.03772
Proportion of Variance 0.00303 0.00069 0.00038 0.00022 0.00013 0.00007
Cumulative Proportion  0.99833 0.99903 0.99941 0.99963 0.99976 0.99984
                          PC14    PC15    PC16    PC17    PC18    PC19
Standard deviation     0.03413 0.02872 0.02484 0.01571 0.01133 0.01044
Proportion of Variance 0.00006 0.00004 0.00003 0.00001 0.00001 0.00001
Cumulative Proportion  0.99990 0.99994 0.99997 0.99999 0.99999 1.00000
PC1 PC2 PC3
chelsa_bioclims_NZ.1 0.333 0.029 -0.197
chelsa_bioclims_NZ.2 0.310 0.019 -0.288
chelsa_bioclims_NZ.3 0.345 0.030 -0.114
chelsa_bioclims_NZ.4 0.048 -0.380 0.021
chelsa_bioclims_NZ.5 0.070 -0.367 0.089
chelsa_bioclims_NZ.6 0.030 -0.379 -0.011
chelsa_bioclims_NZ.7 0.102 0.106 0.275
chelsa_bioclims_NZ.8 0.071 -0.369 0.078
chelsa_bioclims_NZ.9 0.027 -0.379 -0.010
chelsa_bioclims_NZ.10 0.018 -0.379 -0.015
chelsa_bioclims_NZ.11 0.082 -0.352 0.081
chelsa_bioclims_NZ.12 -0.279 -0.060 -0.352
chelsa_bioclims_NZ.13 -0.252 -0.058 -0.362
chelsa_bioclims_NZ.14 -0.300 -0.045 -0.285
chelsa_bioclims_NZ.15 0.215 -0.011 -0.481
chelsa_bioclims_NZ.16 0.351 0.042 -0.021
chelsa_bioclims_NZ.17 -0.285 -0.062 -0.343
chelsa_bioclims_NZ.18 0.273 0.008 -0.209
chelsa_bioclims_NZ.19 0.293 0.046 -0.197

Now I’m going to to environmental niche factor analysis between sexual and asexual populations within the species.

This is for Tectarchus ovobessus.

A couple different ways to visualize the environmental variation. 1) Scatterplot visualizations of marginality vs axis 1 of the specialization with the labels removed (they make things indiscernable). Red = occupied e-space. Gray = Background e-space. 2) ENFA histogram visualizations of marginality and specialization axes. 3) PCA of total e-space with colors corresponding to sexual vs. asexual populations.

binding character and factor vector, coercing into character vector

This is an enfa for Tectarchus huttoni.

A couple different ways to visualize the environmental variation. 1) Scatterplot visualizations of marginality vs axis 1 of the specialization with the labels removed (they make things indiscernable). Red = occupied e-space. Gray = Background e-space. 2) ENFA histogram visualizations of marginality and specialization axes. 3) PCA of total e-space with colors corresponding to sexual vs. asexual populations.

binding character and factor vector, coercing into character vector

Tepakiphasma

Nothing. Only one locality.

LS0tCnRpdGxlOiAiU3RpY2sgSW5zZWN0IENsaW1hdGUgUENBIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICBoaWdobGlnaHQ6IHRhbmdvCi0tLQoKUmVhZCBpbiB0aGUgcGFja2FnZXMuIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyB3aGVyZXZlciB0aGUgUiBOb3RlYm9vayBpcyBsb2NhdGVkLiAKCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0KcGFja2FnZXMgPC0gYygicmFzdGVyIiwgImRhdGEudGFibGUiLCAic2YiLCAidGlkeXZlcnNlIiwgIlJTdG9vbGJveCIsICJsZWFmbGV0IiwgInBsb3RseSIsICJnZGF0YSIsICJCU0RBIiwgImFkZTQiLCAicmVhZHhsIiwgImphbml0b3IiLCAicm5hdHVyYWxlYXJ0aCIsICJhZGVoYWJpdGF0SFMiKSAjUlN0b29sYm94IGhhcyBzb21lIGRlcGVuZGVuY2llcyBsaWtlIG9wZW5NUCB0aGF0IGNhbiBiZSBkaWZmaWN1bHQgdG8gY29tcGlsZSBvbiBhIE1hYyAobmVlZGVkIGZvciB0aGUgZGVwZW5kZW50IHBhY2thZ2UgImNhcmV0IikuIElmIHlvdSBoYXZlIEhpZ2ggU2llcnJhIE9TIG9yIG5ld2VyLCBzZWFyY2ggZm9yIGluc3RydWN0aW9ucyBzcGVjaWZpYyB0byB5b3VyIE9TLSBpdCdzIGEgbG90IGVhc2llciB0aGFuIG9sZGVyIE9TJ3MuCmxhcHBseShwYWNrYWdlcywgcmVxdWlyZSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQpzb3VyY2UoIlIvcGxvdF9sZWFmbGV0X2Z1bmN0aW9uLlIiKSAjc291cmNlIGxvY2FsaXR5IHBsb3R0aW5nIGZ1bmN0aW9uCnNvdXJjZSgiUi9wbG90X2NsaW1hdGVfcGNhX2Z1bmN0aW9uLlIiKSAjc291cmNlIHBjYSBwbG90dGluZyBmdW5jdGlvbgpzb3VyY2UoIlIvc3BlY2llc19wY2FfZnVuY3Rpb24uUiIpICNzb3VyY2UgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBjbGltYXRlIHBjYSBwZXIgc3BlY2llcwpzb3VyY2UoIlIvbWluX2NvbnZleF9wb2x5LlIiKSAjc291cmNlIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG1pbmltdW0gY29udmV4IHBvbHlnb24gYXJvdW5kIHBvaW50cwpzb3VyY2UoIlIvZW5mYV9jYWxjX2Z1bmN0aW9uLlIiKQpzb3VyY2UoIlIvbWFyZ2luYWxpdHlfbG9sbGlwb3BfcGxvdC5SIikKc291cmNlKCJSL3ByZXNlbmNlX2Fic2VuY2VfcmFzdGVyX2Z1bmN0aW9uLlIiKQpzb3VyY2UoIlIvY3JvcF9iYWNrZ3JvdW5kX2Vudl9mdW5jdGlvbi5SIikKc291cmNlKCJSL2VuZmFfaGV4X3Bsb3QuUiIpCnNvdXJjZSgiUi90b3RhbF9jbGltYXRlX3BjYV9wbG90LlIiKQpgYGAKCgpSZWFkIGluIHRoZSBzcHJlYWRzaGVldCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGRhdGEuCgpgYGB7cn0KIyMjcmVhZCBpbiBzcHJlYWRzaGVldApsb2MgPC0gcmVhZF94bHN4KCJPcmlnaW5hbC1zcHJlYWRzaGVldHMvYWxsIHNwZWNpZXMgTmV3XzYtMTQtMTkueGxzeCIpICU+JSAKICBqYW5pdG9yOjpjbGVhbl9uYW1lcygpICU+JSAKICBtdXRhdGUocmVwcm9kdWN0aXZlX21vZGUgPSBhcy5mYWN0b3IocmVwcm9kdWN0aXZlX21vZGUpKSAKCiNnZXQgdGhlIG51bWJlciBvZiBpbmRpdmlkdWFscywgYW5kIHRoZSBzZXh1YWxpdHkgY291bnRzIHBlciBzcGVjaWVzCmNvdW50X3JlcHJvX21vZGUgPC0gbG9jICU+JSAKICBncm91cF9ieShnZW51cywgc3BlY2llcywgcmVwcm9kdWN0aXZlX21vZGUpICU+JSAKICBkcGx5cjo6Y291bnQoKSAlPiUgCiAgbXV0YXRlKGdlbnVzX3NwZWNpZXMgPSBzdHJfYyhnZW51cywgc3BlY2llcywgc2VwID0gIl8iKSwKICAgICAgICAgZ2VudXNfc3BlY2llcyA9IHN0cl9yZXBsYWNlX2FsbChnZW51c19zcGVjaWVzLCAiICIsICJfIiksCiAgICAgICAgIGdlbnVzX3NwZWNpZXMgPSBzdHJfcmVwbGFjZV9hbGwoZ2VudXNfc3BlY2llcywgIlxcLiIsICIiKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgbXV0YXRlKGdlbnVzX3NwZWNpZXMgPSBmY3RfcmVvcmRlcihnZW51c19zcGVjaWVzLCBuLCBzdW0pKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZ2VudXNfc3BlY2llcywgeSA9IG4sIGZpbGwgPSByZXByb2R1Y3RpdmVfbW9kZSkpICsKICBnZW9tX2NvbCgpICsKICBjb29yZF9mbGlwKCkgKyAKICB0aGVtZV9taW5pbWFsKCkKCmNvdW50X3JlcHJvX21vZGUKYGBgCgojI01hcApQbG90IGEgbGVhZmxldCBtYXAgb2YgdGhlIGxvY2FsaXRpZXMuIFRoZSBsZWFmbGV0IG1hcCBpcyBpbnRlcmFjdGl2ZS4gWW91IGNhbiBjbGljayBvbiB0aGUgbG9jYWxpdGllcyBhbmQgYSBmbGFnIHdpdGggc29tZSBtZXRhZGF0YSB3aWxsIHBvcCB1cCEgCgpgYGB7cn0KI21ha2UgbG9jYWxpdHkgc2hhcGUgZmlsZSBhbmQgYXNzaWduIFdHUyBjb29yZCBzeXN0ZW0KY29vcmRfcG9pbnRzIDwtIHN0X2FzX3NmKGxvYywgY29vcmRzID0gYygibG9uZ2l0dWRlIiwgImxhdGl0dWRlIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgY3JzID0gNDMyNiwgYWdyID0gImNvbnN0YW50IikKCiN1c2Ugc291cmNlZCBwbG90X2xvY3NfbGVhZmxldCBzY3JpcHQgdG8gcGxvdCBsb2NhbGl0aWVzCmFsbF9wbG90IDwtIHBsb3RfbG9jc19sZWFmbGV0KGxvYywgInJlcHJvZHVjdGl2ZV9tb2RlIikKCmFsbF9wbG90CiNpbiBjYXNlIEkgd2FudCB0byBzYXZlIHRoZSBtYXAgc29tZXdoZXJlCiNtYXB2aWV3OjptYXBzaG90KGFsbF9wbG90LCB1cmwgPSBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL2FsbF9zcGVjaWVzX21hcC5odG1sIiksIGZpbGUgPSBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL2FsbF9zcGVjaWVzX21hcC5wZGYiKSkKYGBgCgojIyBQQ0EtR2VuZXJhIHsudGFic2V0fQoKIyMjIENsaW1hdGUgRGF0YQpPYnRhaW4gdGhlIGJpb2NsaW0gbGF5ZXJzIGZvciBhbmFseXNpcy4gSSdtIHVzaW5nIGFsbCAxOSBmb3IgdGhpcyBwcmVsaW1pbmFyeSBleHBsb3JhdGlvbi4gSSBwbG90dGVkIHRoZSBmaXJzdCBiaW9jbGltIGp1c3QgdG8gbWFrZSBzdXJlIG5vdGhpbmcgc2VlbXMgd29ua3kuIEknbSB1c2luZyBDSEVMU0EgZGF0YSBkb3dubG9hZGVkIGZyb20gdGhlaXIgd2Vic2l0ZS4gU2luY2UgdGhlIGZpbGVzIGFyZSBodWdlLCBJIG9ubHkgdW56aXAgdGhlbSBvbmUgYXQgYSB0aW1lLCBjcm9wIHRoZW0sIGFuZCB3cml0ZSB0aGVtIHRvIEdlb1RpZmYgZmlsZXMgdGhhdCBJIGNhbiB0aGVuIGxvYWQgaW4gYXMgYSByYXN0ZXJzdGFjay4KYGBge3J9CiMjZ2V0IGNoZWxzYSBkYXRhCiNjaGVsc2FfZm9sZGVyIDwtICIvVXNlcnMvY29ubm9yZnJlbmNoL0Ryb3Bib3gvT2xkX01hYy9jbGltYXRlLWRhdGEvY2hlbHNhXzMwc19iaW8iCiN6aXBfZmlsZXMgPC0gbGlzdC5maWxlcyhjaGVsc2FfZm9sZGVyLCBmdWxsLm5hbWVzID0gVFJVRSkKCiN1c2luZyB0aGUgVW5hcmNoaXZlciBjb21tYW5kbGluZSB0b29scyBmb3IgTWFjIHRvIHVuemlwIHRoZSA3emlwIGNoZWxzYSBsYXllcnMuIFJlZ3VsYXIgdW56aXAoKSBkb2VzIG5vdCB3b3JrIHdpdGggN3ogemlwcGVkIGZpbGVzCiNmb3IgKGZpbGUgaW4gemlwX2ZpbGVzKSB7CiAgI3NldCB0ZW1wIGRpcmVjdG9yeQojICB0ZW1wZCA8LSB0ZW1wZGlyKCkKIyAgc3lzdGVtKHBhc3RlKCJ1bmFyIiwgZmlsZSwgIi1vIiwgdGVtcGQpKQojICByIDwtIHJhc3RlcihsaXN0LmZpbGVzKHRlbXBkLCBwYXR0ZXJuID0gIioudGlmIiwgZnVsbC5uYW1lcyA9IFRSVUUpKSAlPiUKIyAgICBjcm9wKGV4dGVudCgxNjYsIDE3OSwgLTQ4LCAtMzQpKQojICB3cml0ZVJhc3RlcihyLCBmaWxlbmFtZSA9IHBhc3RlMCgifi9EZXNrdG9wLyIsIGxpc3QuZmlsZXModGVtcGQsIHBhdHRlcm4gPSAiKi50aWYiKSksIGZvcm1hdCA9ICJHVGlmZiIpCiMgIHVubGluayh0ZW1wZCwgcmVjdXJzaXZlID0gVFJVRSkKI30KCmNsaW1fZmlsZXMgPC0gIi9Vc2Vycy9jb25ub3JmcmVuY2gvRHJvcGJveC9PbGRfTWFjL2NsaW1hdGUtZGF0YS9jaGVsc2FfMzBzZWNfTmV3WmVhbGFuZC9jaGVsc2FfYmlvY2xpbXNfTloudGlmIgp3IDwtIHN0YWNrKGNsaW1fZmlsZXMpCgoKYGBgCgoKIyMjIFBDQSBieSBsb2NhbGl0eQpUaGlzIGlzIGEgUENBIG9mIHRoZSBjbGltYXRlIGRhdGEgZXh0cmFjdGVkIGZvciBlYWNoIGxvY2FsaXR5LCByYXRoZXIgdGhhbiBhIFBDQSBvZiB0aGUgdG90YWwgY2xpbWF0ZSBzcGFjZS4KClJ1biB0aGUgcGNhIGFuZCBjaGVjayBvdXQgdmFyaWFibGUgbG9hZGluZ3MgYW5kIHByb3BvcnRpb24gb2YgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IGNvbXBvbmVudHMuCgpgYGB7cn0KI2V4dHJhY3QgZGF0YSBmcm9tIHdvcmxkY2xpbSBmb3IgZWFjaCBsb2NhbGl0eS4gTWFraW5nIHRoaXMgaW50byBhIGRhdGEgZnJhbWUgd2l0aCBjb2x1bW5zIGxhYmVsZWQgc28gdGhlIHJvdyBsYWJlbGluZyBsaW5lcyB1cCBhZnRlciBJIHJlbW92ZSB0aGUgTkFzLgojZXh0cmFjdCBkYXRhIGZyb20gd29ybGRjbGltIGZvciBlYWNoIGxvY2FsaXR5Lgpjb29yZHMgPC0gZGF0YS5mcmFtZShsYXRpdHVkZSA9IGxvYyRsb25naXR1ZGUsIGxvbmdpdHVkZSA9IGxvYyRsYXRpdHVkZSkKCmxvYy5jbGltIDwtIGRwbHlyOjpiaW5kX2NvbHMobG9jLCByYXN0ZXI6OmV4dHJhY3QodywgY29vcmRzLCBtZXRob2QgPSAic2ltcGxlIiwgZGYgPSBUUlVFKSkgJT4lIAogIGRyb3BfbmEoY2hlbHNhX2Jpb2NsaW1zX05aLjEpICU+JSAKICBkcGx5cjo6c2VsZWN0KC1JRCkKCiNtYWtlIGEgbWF0cml4IG9mIG9ubHkgYmlvY2xpbSB2YWx1ZXMKY2xpbS5tYXQgPC0gbG9jLmNsaW1bLGdyZXAoImJpbyIsIG5hbWVzKGxvYy5jbGltKSldICU+JSBhcy5tYXRyaXgoKQoKI3J1biBwY2Egb24gY2xpbWF0ZSB2YXJpYWJsZXMKY2xpbS5wY2EgPC0gcHJjb21wKGNsaW0ubWF0LCBzY2FsZSA9IFRSVUUpCnN1bW1hcnkucGNhIDwtIHN1bW1hcnkoY2xpbS5wY2EpICNjaGVjayBvdXQgdGhlIGNvbXBvbmVudHMKCiNwbG90IHRhYmxlcwpzdW1tYXJ5LnBjYQprbml0cjo6a2FibGUocm91bmQoY2xpbS5wY2Ekcm90YXRpb25bLDE6M10sMykpICNUYWJsZSBvZiBsb2FkaW5nIHNjb3JlcyBmb3IgdGhlIGZpcnN0IDMgUENzLgpgYGAKClR3byBwbG90czogT25lIHBsb3Qgb2YgdGhlIFBDQSBjb2xvcmVkIGFjY29yZGluZyB0byBnZW51cywgd2l0aCBjb252ZXggaHVsbHMgc3Vycm91bmRpbmcgdGhlIGdlbmVyYS4gSXQgbG9va3MgbGlrZSB0aGlzIHJlZmxlY3RzIGEgbGF0aXR1ZGluYWwgZ3JhZGllbnQgaW4gdGVtcGVyYXR1cmUhIFlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgUENBIHBsb3QgYnkgY2xpY2tpbmcgb24gcG9pbnRzIHRvIHZpZXcgYXNzb2NpYXRlZCBtZXRhZGF0YS4gWW91IGNhbiBpc29sYXRlIHRoZSBnZW51cyB5b3Ugd2FudCB0byB2aWV3IGJ5IGRvdWJsZSBjbGlja2luZyB0aGUgZ2VudXMgaW4gdGhlIGxlZ2VuZCEgWW91IGNhbiBhbHNvIHJlbW92ZSBhIGdlbnVzIGJ5IGNsaWNraW5nIG9uIGl0IG9uY2UuIFRoZXJlJ3Mgc29tZSBvdGhlciBmdW5jdGlvbmFsaXR5IHlvdSBjYW4gZXhwbG9yZSBpbiB0aGUgdG9vbGJhciBhdCB0aGUgdG9wIG9mIHRoZSBwbG90LiBUaGUgc2Vjb25kIHBsb3QgaXMgYSBQQ0EgY29sb3JlZCBhY2NvcmRpbmcgdG8gcmVwcm9kdWN0aXZlIG1vZGUuIEl0IGxvb2tzIGxpa2UgYXNleHVhbCBwb3B1bGF0aW9ucyBvY2N1cHkgc2xpZ2h0bHkgbGFyZ2VyIG5pY2hlIHNwYWNlLCBidXQgYm90aCByZXByb2R1Y3RpdmUgbW9kZXMgaGF2ZSBhIHNpbWlsYXIgbmljaGUgY2VudGVyLgpgYGB7cn0KI2FkZCBwY2EgcmVzdWx0cyB0byBsb2MuY2xpbSBkYXRhIGZyYW1lCmxvYy5jbGltIDwtIGRhdGEuZnJhbWUobG9jLmNsaW0sIGNsaW0ucGNhJHgpCgojdXNlIHNvdXJjZWQgcGxvdF9jbGltX3BjYSBmdW5jdGlvbiB0byBwbG90IHRoZSBwY2EgcmVzdWx0cy4gYXJncyBhcmUgdGhlIGRhdGEgc2V0IHdpdGggc3BlY2llcyBuYW1lcyBhbmQgUEMgYXhpcyB2YWx1ZXMgYW5kIHRoZSBwY2Egc3VtbWFyeQphbGxfcGNhIDwtIHBsb3RfY2xpbV9wY2EobG9jLmNsaW0sIHN1bW1hcnkucGNhLCBmYWN0b3IgPSAiZ2VudXMiKQphbGxfcGNhCgojdXNlIHNvdXJjZWQgcGxvdF9jbGltX3BjYSBmdW5jdGlvbiB0byBwbG90IHRoZSBwY2EgcmVzdWx0cy4gYXJncyBhcmUgdGhlIGRhdGEgc2V0IHdpdGggc3BlY2llcyBuYW1lcyBhbmQgUEMgYXhpcyB2YWx1ZXMgYW5kIHRoZSBwY2Egc3VtbWFyeQpyZXByb19wY2EgPC0gcGxvdF9jbGltX3BjYShsb2MuY2xpbSwgc3VtbWFyeS5wY2EsIGZhY3RvciA9ICJyZXByb2R1Y3RpdmVfbW9kZSIpCnJlcHJvX3BjYQoKI3NhdmUgdGhlIHBsb3QgY29sb3JlZCBieSBnZW51cwojaHRtbHdpZGdldHM6OnNhdmVXaWRnZXQoYWxsX3BjYSwgcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9hbGxfc3BlY2llc19wY2FfZ2VudXMuaHRtbCIpLCBzZWxmY29udGFpbmVkID0gVFJVRSkKCiNzYXZlIHRoZSBwbG90IGNvbG9yZWQgYnkgcmVwcm9kdWN0aXZlIG1vZGUKI2h0bWx3aWRnZXRzOjpzYXZlV2lkZ2V0KHJlcHJvX3BjYSwgcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9hbGxfc3BlY2llc19wY2FfcmVwcm8uaHRtbCIpLCBzZWxmY29udGFpbmVkID0gVFJVRSkKCgoKYGBgCgoKCgoKCgojIyBQQ0EtU3BlY2llcyB7LnRhYnNldH0KVGhlc2UgYXJlIFBDQXMgb2YgZW52aXJvbm1lbnRhbCBzcGFjZSBmb3Igc3BlY2llcyB3aXRoaW4gZ2VuZXJhLiBFYWNoIGNsaW1hdGUgUENBIGlzIG9mIGxvY2FsaXRpZXMgZm9yIGEgc2luZ2xlIGdlbnVzLCBjb2xvcmVkIGJ5IHNwZWNpZXMuIEknbSBkb2luZyB0aGlzIGV2ZW4gZm9yIGdlbmVyYSB3aXRoIG9uZSBzcGVjaWVzLCBzbyBpdCdzIGVhc3kgdG8gc2VlIGlmIGNlcnRhaW4gbG9jYWxpdGllcyBncm91cCB0b2dldGhlci4gCgojIyMgQWNhbnRob3h5bGEKYGBge3J9CiNzb3VyY2UgZnVuY3Rpb24gdG8gY29uZHVjdCBhIFBDQSBvbiBpbmRpdmlkdWFsIHNwZWNpZXMKc3VtbWFyeS5saXN0LmFjYW4gPC0gc3BlY2llc19wY2FfZnVuKGxvYy5jbGltLCAiYWNhbnRob3h5bGEiKQojcGxvdAphY2FuX3Bsb3QgPC0gcGxvdF9jbGltX3BjYShzdW1tYXJ5Lmxpc3QuYWNhbiRsb2MuY2xpbSwgc3VtbWFyeS5saXN0LmFjYW4kc3VtbWFyeS5wY2EsICJyZXByb2R1Y3RpdmVfbW9kZSIpCgphY2FuX3Bsb3QKCiNzYXZlIHBjYSBwbG90CiNodG1sd2lkZ2V0czo6c2F2ZVdpZGdldChhY2FuX3Bsb3QsIHBhc3RlMChnZXR3ZCgpLCAiL3Bsb3RzL3JlcHJvX21vZGVfcGxvdHMvYWNhbnRob3h5bGFfcGNhLmh0bWwiKSwgc2VsZmNvbnRhaW5lZCA9IFRSVUUpCgojZmlsdGVyIGxvY2FsaXRpZXMgZm9yIHRoZSBmb2NhbCBnZW51cwphY2FuX2xvYyA8LSBsb2MgJT4lIAogIGZpbHRlcihnZW51cyA9PSAiYWNhbnRob3h5bGEiKQogIAojdXNlIHNvdXJjZWQgcGxvdF9sb2NzX2xlYWZsZXQgc2NyaXB0IHRvIHBsb3QgbG9jYWxpdGllcwphY2FuX21hcCA8LSBwbG90X2xvY3NfbGVhZmxldChhY2FuX2xvYywgInJlcHJvZHVjdGl2ZV9tb2RlIikKCmFjYW5fbWFwCgojaW4gY2FzZSBJIHdhbnQgdG8gc2F2ZSB0aGUgbWFwIHNvbWV3aGVyZQojbWFwdmlldzo6bWFwc2hvdChhY2FuX21hcCwgdXJsID0gcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9hY2FuX21hcC5odG1sIiksIGZpbGUgPSBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL2FjYW5fbWFwLnBkZiIpKQpgYGAKCgpgYGB7cn0Kc3VtbWFyeS5saXN0LmFjYW4kc3VtbWFyeS5wY2EKbG9hZGluZ3MuYWNhbiA8LSBzdW1tYXJ5Lmxpc3QuYWNhbiRzdW1tYXJ5LnBjYSRyb3RhdGlvbgprbml0cjo6a2FibGUocm91bmQobG9hZGluZ3MuYWNhblssMTozXSwzKSkgI1RhYmxlIG9mIGxvYWRpbmcgc2NvcmVzIGZvciB0aGUgZmlyc3QgMyBQQ3MuIApgYGAKCgojIyMgQXJnb3NhcmNodXMKYGBge3J9CiNjb25kdWN0IHBjYQpzdW1tYXJ5Lmxpc3QuYXJnbyA8LSBzcGVjaWVzX3BjYV9mdW4obG9jLmNsaW0sICJhcmdvc2FyY2h1cyIpCiNwbG90CmFyZ29fcGxvdCA8LSBwbG90X2NsaW1fcGNhKHN1bW1hcnkubGlzdC5hcmdvJGxvYy5jbGltLCBzdW1tYXJ5Lmxpc3QuYXJnbyRzdW1tYXJ5LnBjYSwgZmFjdG9yID0gInJlcHJvZHVjdGl2ZV9tb2RlIikKYXJnb19wbG90CgojaWYgc2VsZmNvbnRhaW5lZCA9IFRSVUUsIHlvdSBjYW4gcmVtb3ZlIHRoZSBmb2xkZXIgdGhhdCBnZXRzIGFkZGVkIGFsb25nc2lkZSB0aGUgcGxvdC4gSXQncyBhbiBhbm5veWluZyBidWcgdGhhdCBoYXNuJ3QgYmVlbiBmaXhlZCB5ZXQuCiNodG1sd2lkZ2V0czo6c2F2ZVdpZGdldChhcmdvX3Bsb3QsIHBhc3RlMChnZXR3ZCgpLCAiL3Bsb3RzL3JlcHJvX21vZGVfcGxvdHMvYXJnb3NhcmNodXNfcGNhLmh0bWwiKSwgc2VsZmNvbnRhaW5lZCA9IFRSVUUpCgojZmlsdGVyIGxvY2FsaXRpZXMgZm9yIHRoZSBmb2NhbCBnZW51cwphcmdvX2xvYyA8LSBsb2MgJT4lIAogIGZpbHRlcihnZW51cyA9PSAiYXJnb3NhcmNodXMiKQogIAojdXNlIHNvdXJjZWQgcGxvdF9sb2NzX2xlYWZsZXQgc2NyaXB0IHRvIHBsb3QgbG9jYWxpdGllcwphcmdvX21hcCA8LSBwbG90X2xvY3NfbGVhZmxldChhcmdvX2xvYywgInJlcHJvZHVjdGl2ZV9tb2RlIikKCmFyZ29fbWFwCgojaW4gY2FzZSBJIHdhbnQgdG8gc2F2ZSB0aGUgbWFwIHNvbWV3aGVyZQojbWFwdmlldzo6bWFwc2hvdChhcmdvX21hcCwgdXJsID0gcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9hcmdvX21hcC5odG1sIiksIGZpbGUgPSBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL2FyZ29fbWFwLnBkZiIpKQoKCmBgYAoKYGBge3J9CnN1bW1hcnkubGlzdC5hcmdvJHN1bW1hcnkucGNhCmxvYWRpbmdzLmFyZ28gPC0gc3VtbWFyeS5saXN0LmFyZ28kc3VtbWFyeS5wY2Ekcm90YXRpb24Ka25pdHI6OmthYmxlKHJvdW5kKGxvYWRpbmdzLmFyZ29bLDE6M10sMykpICNUYWJsZSBvZiBsb2FkaW5nIHNjb3JlcyBmb3IgdGhlIGZpcnN0IDMgUENzLiAKYGBgCgpOb3cgSSdtIGdvaW5nIHRvIHRvIGVudmlyb25tZW50YWwgbmljaGUgZmFjdG9yIGFuYWx5c2lzIGJldHdlZW4gc2V4dWFsIGFuZCBhc2V4dWFsIHBvcHVsYXRpb25zIHdpdGhpbiB0aGUgc3BlY2llcy4KYGBge3J9CgojZ2V0IGJhY2tncm91bmQgZW52J3QgZm9yIHRoZSBzcGVjaWVzCmFob3JfYmdfZW52IDwtIGJnX2Vudl9jcm9wKGFyZ29fbG9jLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2llcyA9ICJob3JyaWR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50ID0gdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IDAuNSkKCiNlbmZhIGZvciB0aGUgc2V4dWFsIHNwZWNpZXMKYWhvcl9zZXh1YWxfZW5mYSA8LSBlbmZhX2NhbGNfZnVuKGxvY3MgPSBhcmdvX2xvYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWVzID0gImhvcnJpZHVzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByb2R1Y3RpdmVfbW9kZSA9ICJzZXh1YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfcmFzdGVyID0gYWhvcl9iZ19lbnYpCgojZW5mYSBmb3IgdGhlIGFzZXh1YWwgc3BlY2llcwphaG9yX2FzZXh1YWxfZW5mYSA8LSBlbmZhX2NhbGNfZnVuKGxvY3MgPSBhcmdvX2xvYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2llcyA9ICJob3JyaWR1cyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjdGl2ZV9tb2RlID0gImFzZXh1YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX3Jhc3RlciA9IGFob3JfYmdfZW52KQoKCiNwbG90IHRoZSBtYXJnaW5hbGl0eSBzY29yZXMKbWFyZ2luYWxpdHlfbG9sbGlwb3Aoc2V4X21hcmcgPSBhaG9yX3NleHVhbF9lbmZhJG0sIAogICAgICAgICAgICAgICAgICAgIGFzZXhfbWFyZyA9IGFob3JfYXNleHVhbF9lbmZhJG0sCiAgICAgICAgICAgICAgICAgICAgZnVsbF9zcGVjaWVzX25hbWUgPSAiQXJnb3NhcmNodXMgaG9ycmlkdXMiKQoKCgpgYGAKCkEgY291cGxlIGRpZmZlcmVudCB3YXlzIHRvIHZpc3VhbGl6ZSB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYXRpb24uIDEpIFNjYXR0ZXJwbG90IHZpc3VhbGl6YXRpb25zIG9mIG1hcmdpbmFsaXR5IHZzIGF4aXMgMSBvZiB0aGUgc3BlY2lhbGl6YXRpb24gd2l0aCB0aGUgbGFiZWxzIHJlbW92ZWQgKHRoZXkgbWFrZSB0aGluZ3MgaW5kaXNjZXJuYWJsZSkuIFJlZCA9IG9jY3VwaWVkIGUtc3BhY2UuIEdyYXkgPSBCYWNrZ3JvdW5kIGUtc3BhY2UuIDIpIEVORkEgaGlzdG9ncmFtIHZpc3VhbGl6YXRpb25zIG9mIG1hcmdpbmFsaXR5IGFuZCBzcGVjaWFsaXphdGlvbiBheGVzLiAzKSBQQ0Egb2YgdG90YWwgZS1zcGFjZSB3aXRoIGNvbG9ycyBjb3JyZXNwb25kaW5nIHRvIHNleHVhbCB2cy4gYXNleHVhbCBwb3B1bGF0aW9ucy4gCmBgYHtyfQojIyMgMSkgRU5GQSBzY2F0dGVycGxvdAojYWNjZXNzIHRoZSByZWxldmFudCB2YWx1ZXMgZm9yIHBsb3R0aW5nCmFob3JfYXNleHVhbF9kZiA8LSBhaG9yX2FzZXh1YWxfZW5mYSRsaSAlPiUgCiAgYXNfdGliYmxlKCkgJT4lIAogIGJpbmRfY29scyhwciA9IGFob3JfYXNleHVhbF9lbmZhJHByKQoKCmFob3Jfc2V4dWFsX2RmIDwtIGFob3Jfc2V4dWFsX2VuZmEkbGkgJT4lIAogIGFzX3RpYmJsZSgpICU+JSAKICBiaW5kX2NvbHMocHIgPSBhaG9yX3NleHVhbF9lbmZhJHByKQoKCiNhc2V4dWFsCmVuZmFfaGV4X3Bsb3QoYWhvcl9hc2V4dWFsX2RmLCBtYXJnID0gTWFyLCBzcGVjID0gU3BlMSwgcmVwcm9fbW9kZSA9ICJBc2V4dWFsIikKCgojc2V4dWFsCmVuZmFfaGV4X3Bsb3QoYWhvcl9zZXh1YWxfZGYsIG1hcmcgPSBNYXIsIHNwZWMgPSBTcGUxLCByZXByb19tb2RlID0gIlNleHVhbCIpCgoKIyMjIDIpIEVORkEgaGlzdG9ncmFtCiNhc2V4dWFsCmhpc3QoYWhvcl9hc2V4dWFsX2VuZmEpCnRpdGxlKG1haW4gPSAiQXNleHVhbCIsIGFkaiA9IDAuNywgbGluZSA9IC0xMikKCiNzZXh1YWwKaGlzdChhaG9yX3NleHVhbF9lbmZhKQp0aXRsZShtYWluID0gIlNleHVhbCIsIGFkaiA9IDAuNywgbGluZSA9IC0xMikKCiMjIyAzKSBQQ0Egb2YgdG90YWwgZS1zcGFjZQp0b3RhbF9jbGltYXRlX3BjYV9wbG90KGJnX2VudiA9IGFob3JfYmdfZW52LCBsb2NzID0gYXJnb19sb2MsIGdlbnVzID0gIkFyZ29zYXJjaHVzIiwgc3BlY2llcyA9ICJob3JyaWR1cyIpCgpgYGAKCgojIyMgQXN0ZWxpYXBoYXNtYQpgYGB7cn0KI3BjYQpzdW1tYXJ5Lmxpc3QuYXN0ZSA8LSBzcGVjaWVzX3BjYV9mdW4obG9jLmNsaW0sICJhc3RlbGlhcGhhc21hIikKI3Bsb3QKYXN0ZV9wbG90IDwtIHBsb3RfY2xpbV9wY2Eoc3VtbWFyeS5saXN0LmFzdGUkbG9jLmNsaW0sIHN1bW1hcnkubGlzdC5hc3RlJHN1bW1hcnkucGNhLCBmYWN0b3IgPSAicmVwcm9kdWN0aXZlX21vZGUiKQphc3RlX3Bsb3QKCiNpZiBzZWxmY29udGFpbmVkID0gVFJVRSwgeW91IGNhbiByZW1vdmUgdGhlIGZvbGRlciB0aGF0IGdldHMgYWRkZWQgYWxvbmdzaWRlIHRoZSBwbG90LiBJdCdzIGFuIGFubm95aW5nIGJ1ZyB0aGF0IGhhc24ndCBiZWVuIGZpeGVkIHlldC4KI2h0bWx3aWRnZXRzOjpzYXZlV2lkZ2V0KGFzdGVfcGxvdCwgcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9hc3RlbGlhcGhhc21hX3BjYS5odG1sIiksIHNlbGZjb250YWluZWQgPSBUUlVFKQoKI2ZpbHRlciBsb2NhbGl0aWVzIGZvciB0aGUgZm9jYWwgZ2VudXMKYXN0ZV9sb2MgPC0gbG9jICU+JSAKICBmaWx0ZXIoZ2VudXMgPT0gImFzdGVsaWFwaGFzbWEiKQogIAojdXNlIHNvdXJjZWQgcGxvdF9sb2NzX2xlYWZsZXQgc2NyaXB0IHRvIHBsb3QgbG9jYWxpdGllcwphc3RlX21hcCA8LSBwbG90X2xvY3NfbGVhZmxldChhc3RlX2xvYywgInJlcHJvZHVjdGl2ZV9tb2RlIikKCmFzdGVfbWFwCgojaW4gY2FzZSBJIHdhbnQgdG8gc2F2ZSB0aGUgbWFwIHNvbWV3aGVyZQojbWFwdmlldzo6bWFwc2hvdChhc3RlX21hcCwgdXJsID0gcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9hc3RlX21hcC5odG1sIiksIGZpbGUgPSBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL2FzdGVfbWFwLnBkZiIpKQoKYGBgCgoKCmBgYHtyfQpzdW1tYXJ5Lmxpc3QuYXN0ZSRzdW1tYXJ5LnBjYQpsb2FkaW5ncy5hc3RlIDwtIHN1bW1hcnkubGlzdC5hc3RlJHN1bW1hcnkucGNhJHJvdGF0aW9uCmtuaXRyOjprYWJsZShyb3VuZChsb2FkaW5ncy5hc3RlWywxOjNdLDMpKSAjVGFibGUgb2YgbG9hZGluZyBzY29yZXMgZm9yIHRoZSBmaXJzdCAzIFBDcy4gCmBgYAoKCgpOb3cgSSdtIGdvaW5nIHRvIHRvIGVudmlyb25tZW50YWwgbmljaGUgZmFjdG9yIGFuYWx5c2lzIGJldHdlZW4gc2V4dWFsIGFuZCBhc2V4dWFsIHBvcHVsYXRpb25zIHdpdGhpbiB0aGUgc3BlY2llcy4KYGBge3J9CiNnZXQgYmFja2dyb3VuZCBlbnYndCBmb3IgdGhlIHNwZWNpZXMKYWp1Y19iZ19lbnYgPC0gYmdfZW52X2Nyb3AoYXN0ZV9sb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWVzID0gImp1Y3VuZHVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgPSB3LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gMC41KQoKI2VuZmEgZm9yIHRoZSBzZXh1YWwgc3BlY2llcwphanVjX3NleHVhbF9lbmZhIDwtIGVuZmFfY2FsY19mdW4obG9jcyA9IGFzdGVfbG9jLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZXMgPSAianVjdW5kdW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjdGl2ZV9tb2RlID0gInNleHVhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19yYXN0ZXIgPSBhanVjX2JnX2VudikKCiNlbmZhIGZvciB0aGUgYXNleHVhbCBzcGVjaWVzCmFqdWNfYXNleHVhbF9lbmZhIDwtIGVuZmFfY2FsY19mdW4obG9jcyA9IGFzdGVfbG9jLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWVzID0gImp1Y3VuZHVtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcm9kdWN0aXZlX21vZGUgPSAiYXNleHVhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfcmFzdGVyID0gYWp1Y19iZ19lbnYpCgoKI3Bsb3QgdGhlIG1hcmdpbmFsaXR5IHNjb3JlcwptYXJnaW5hbGl0eV9sb2xsaXBvcChzZXhfbWFyZyA9IGFqdWNfc2V4dWFsX2VuZmEkbSwgCiAgICAgICAgICAgICAgICAgICAgYXNleF9tYXJnID0gYWp1Y19hc2V4dWFsX2VuZmEkbSwKICAgICAgICAgICAgICAgICAgICBmdWxsX3NwZWNpZXNfbmFtZSA9ICJBc3RlbGlhcGhhc21hIGp1Y3VuZHVtIikKCmBgYAoKQSBjb3VwbGUgZGlmZmVyZW50IHdheXMgdG8gdmlzdWFsaXplIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhdGlvbi4gMSkgU2NhdHRlcnBsb3QgdmlzdWFsaXphdGlvbnMgb2YgbWFyZ2luYWxpdHkgdnMgYXhpcyAxIG9mIHRoZSBzcGVjaWFsaXphdGlvbiB3aXRoIHRoZSBsYWJlbHMgcmVtb3ZlZCAodGhleSBtYWtlIHRoaW5ncyBpbmRpc2Nlcm5hYmxlKS4gUmVkID0gb2NjdXBpZWQgZS1zcGFjZS4gR3JheSA9IEJhY2tncm91bmQgZS1zcGFjZS4gMikgRU5GQSBoaXN0b2dyYW0gdmlzdWFsaXphdGlvbnMgb2YgbWFyZ2luYWxpdHkgYW5kIHNwZWNpYWxpemF0aW9uIGF4ZXMuIDMpIFBDQSBvZiB0b3RhbCBlLXNwYWNlIHdpdGggY29sb3JzIGNvcnJlc3BvbmRpbmcgdG8gc2V4dWFsIHZzLiBhc2V4dWFsIHBvcHVsYXRpb25zLiAKYGBge3J9CiMjIyAxKSBFTkZBIHNjYXR0ZXJwbG90CiNhY2Nlc3MgdGhlIHJlbGV2YW50IHZhbHVlcyBmb3IgcGxvdHRpbmcKYWp1Y19hc2V4dWFsX2RmIDwtIGFqdWNfYXNleHVhbF9lbmZhJGxpICU+JSAKICBhc190aWJibGUoKSAlPiUgCiAgYmluZF9jb2xzKHByID0gYWp1Y19hc2V4dWFsX2VuZmEkcHIpCgoKYWp1Y19zZXh1YWxfZGYgPC0gYWp1Y19zZXh1YWxfZW5mYSRsaSAlPiUgCiAgYXNfdGliYmxlKCkgJT4lIAogIGJpbmRfY29scyhwciA9IGFqdWNfc2V4dWFsX2VuZmEkcHIpCgoKI2FzZXh1YWwKZW5mYV9oZXhfcGxvdChhanVjX2FzZXh1YWxfZGYsIG1hcmcgPSBNYXIsIHNwZWMgPSBTcGUxLCByZXByb19tb2RlID0gIkFzZXh1YWwiKQoKCiNzZXh1YWwKZW5mYV9oZXhfcGxvdChhanVjX3NleHVhbF9kZiwgbWFyZyA9IE1hciwgc3BlYyA9IFNwZTEsIHJlcHJvX21vZGUgPSAiU2V4dWFsIikKCgojIyMgMikgRU5GQSBoaXN0b2dyYW0KI2FzZXh1YWwKaGlzdChhanVjX2FzZXh1YWxfZW5mYSkKdGl0bGUobWFpbiA9ICJBc2V4dWFsIiwgYWRqID0gMC43LCBsaW5lID0gLTEyKQoKI3NleHVhbApoaXN0KGFqdWNfc2V4dWFsX2VuZmEpCnRpdGxlKG1haW4gPSAiU2V4dWFsIiwgYWRqID0gMC43LCBsaW5lID0gLTEyKQoKIyMjIDMpIFBDQSBvZiB0b3RhbCBlLXNwYWNlCnRvdGFsX2NsaW1hdGVfcGNhX3Bsb3QoYmdfZW52ID0gYWp1Y19iZ19lbnYsIGxvY3MgPSBhc3RlX2xvYywgZ2VudXMgPSAiQXN0ZWxpb3BoYXNtYSIsIHNwZWNpZXMgPSAianVjdW5kdW0iKQoKYGBgCgoKCiMjIyBDbGl0YXJjaHVzCgpgYGB7cn0Kc3VtbWFyeS5saXN0LmNsaXRhIDwtIHNwZWNpZXNfcGNhX2Z1bihsb2MuY2xpbSwgImNsaXRhcmNodXMiKQpjbGl0YV9wbG90IDwtIHBsb3RfY2xpbV9wY2Eoc3VtbWFyeS5saXN0LmNsaXRhJGxvYy5jbGltLCBzdW1tYXJ5Lmxpc3QuY2xpdGEkc3VtbWFyeS5wY2EsIGZhY3RvciA9ICJyZXByb2R1Y3RpdmVfbW9kZSIpCmNsaXRhX3Bsb3QKCiNpZiBzZWxmY29udGFpbmVkID0gVFJVRSwgeW91IGNhbiByZW1vdmUgdGhlIGZvbGRlciB0aGF0IGdldHMgYWRkZWQgYWxvbmdzaWRlIHRoZSBwbG90LiBJdCdzIGFuIGFubm95aW5nIGJ1ZyB0aGF0IGhhc24ndCBiZWVuIGZpeGVkIHlldC4KI2h0bWx3aWRnZXRzOjpzYXZlV2lkZ2V0KGNsaXRhX3Bsb3QsIHBhc3RlMChnZXR3ZCgpLCAiL3Bsb3RzL3JlcHJvX21vZGVfcGxvdHMvY2xpdGFyY2h1c19wY2EuaHRtbCIpLCBzZWxmY29udGFpbmVkID0gVFJVRSkKCiNmaWx0ZXIgbG9jYWxpdGllcyBmb3IgdGhlIGZvY2FsIGdlbnVzCmNsaXRhX2xvYyA8LSBsb2MgJT4lIAogIGZpbHRlcihnZW51cyA9PSAiY2xpdGFyY2h1cyIpCiAgCiN1c2Ugc291cmNlZCBwbG90X2xvY3NfbGVhZmxldCBzY3JpcHQgdG8gcGxvdCBsb2NhbGl0aWVzCmNsaXRhX21hcCA8LSBwbG90X2xvY3NfbGVhZmxldChjbGl0YV9sb2MsICJyZXByb2R1Y3RpdmVfbW9kZSIpCgpjbGl0YV9tYXAKCiNpbiBjYXNlIEkgd2FudCB0byBzYXZlIHRoZSBtYXAgc29tZXdoZXJlCiNtYXB2aWV3OjptYXBzaG90KGNsaXRhX21hcCwgdXJsID0gcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9jbGl0YV9tYXAuaHRtbCIpLCBmaWxlID0gcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9jbGl0YV9tYXAucGRmIikpCgpgYGAKCgpgYGB7cn0Kc3VtbWFyeS5saXN0LmNsaXRhJHN1bW1hcnkucGNhCmxvYWRpbmdzLmNsaXRhIDwtIHN1bW1hcnkubGlzdC5jbGl0YSRzdW1tYXJ5LnBjYSRyb3RhdGlvbgprbml0cjo6a2FibGUocm91bmQobG9hZGluZ3MuY2xpdGFbLDE6M10sMykpICNUYWJsZSBvZiBsb2FkaW5nIHNjb3JlcyBmb3IgdGhlIGZpcnN0IDMgUENzLiAKYGBgCgoKTm93IEknbSBnb2luZyB0byB0byBlbnZpcm9ubWVudGFsIG5pY2hlIGZhY3RvciBhbmFseXNpcyBiZXR3ZWVuIHNleHVhbCBhbmQgYXNleHVhbCBwb3B1bGF0aW9ucyB3aXRoaW4gdGhlIHNwZWNpZXMuCmBgYHtyfQojZ2V0IGJhY2tncm91bmQgZW52J3QgZm9yIHRoZSBzcGVjaWVzCmNob29fYmdfZW52IDwtIGJnX2Vudl9jcm9wKGNsaXRhX2xvYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZXMgPSAiaG9va2VyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50ID0gdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IDAuNSkKCiNlbmZhIGZvciB0aGUgc2V4dWFsIHNwZWNpZXMKY2hvb19zZXh1YWxfZW5mYSA8LSBlbmZhX2NhbGNfZnVuKGxvY3MgPSBjbGl0YV9sb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2llcyA9ICJob29rZXJpIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByb2R1Y3RpdmVfbW9kZSA9ICJzZXh1YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfcmFzdGVyID0gY2hvb19iZ19lbnYpCgojZW5mYSBmb3IgdGhlIGFzZXh1YWwgc3BlY2llcwpjaG9vX2FzZXh1YWxfZW5mYSA8LSBlbmZhX2NhbGNfZnVuKGxvY3MgPSBjbGl0YV9sb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZXMgPSAiaG9va2VyaSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjdGl2ZV9tb2RlID0gImFzZXh1YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX3Jhc3RlciA9IGNob29fYmdfZW52KQoKCiNwbG90IHRoZSBtYXJnaW5hbGl0eSBzY29yZXMKbWFyZ2luYWxpdHlfbG9sbGlwb3Aoc2V4X21hcmcgPSBjaG9vX3NleHVhbF9lbmZhJG0sIAogICAgICAgICAgICAgICAgICAgIGFzZXhfbWFyZyA9IGNob29fYXNleHVhbF9lbmZhJG0sCiAgICAgICAgICAgICAgICAgICAgZnVsbF9zcGVjaWVzX25hbWUgPSAiQ2xpdGFyY2h1cyBob29rZXJpIikKCmBgYAoKQSBjb3VwbGUgZGlmZmVyZW50IHdheXMgdG8gdmlzdWFsaXplIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhdGlvbi4gMSkgU2NhdHRlcnBsb3QgdmlzdWFsaXphdGlvbnMgb2YgbWFyZ2luYWxpdHkgdnMgYXhpcyAxIG9mIHRoZSBzcGVjaWFsaXphdGlvbiB3aXRoIHRoZSBsYWJlbHMgcmVtb3ZlZCAodGhleSBtYWtlIHRoaW5ncyBpbmRpc2Nlcm5hYmxlKS4gUmVkID0gb2NjdXBpZWQgZS1zcGFjZS4gR3JheSA9IEJhY2tncm91bmQgZS1zcGFjZS4gMikgRU5GQSBoaXN0b2dyYW0gdmlzdWFsaXphdGlvbnMgb2YgbWFyZ2luYWxpdHkgYW5kIHNwZWNpYWxpemF0aW9uIGF4ZXMuIDMpIFBDQSBvZiB0b3RhbCBlLXNwYWNlIHdpdGggY29sb3JzIGNvcnJlc3BvbmRpbmcgdG8gc2V4dWFsIHZzLiBhc2V4dWFsIHBvcHVsYXRpb25zLiAKYGBge3J9CiMjIyAxKSBFTkZBIHNjYXR0ZXJwbG90CiNhY2Nlc3MgdGhlIHJlbGV2YW50IHZhbHVlcyBmb3IgcGxvdHRpbmcKY2hvb19hc2V4dWFsX2RmIDwtIGNob29fYXNleHVhbF9lbmZhJGxpICU+JSAKICBhc190aWJibGUoKSAlPiUgCiAgYmluZF9jb2xzKHByID0gY2hvb19hc2V4dWFsX2VuZmEkcHIpCgoKY2hvb19zZXh1YWxfZGYgPC0gY2hvb19zZXh1YWxfZW5mYSRsaSAlPiUgCiAgYXNfdGliYmxlKCkgJT4lIAogIGJpbmRfY29scyhwciA9IGNob29fc2V4dWFsX2VuZmEkcHIpCgoKI2FzZXh1YWwKZW5mYV9oZXhfcGxvdChjaG9vX2FzZXh1YWxfZGYsIG1hcmcgPSBNYXIsIHNwZWMgPSBTcGUxLCByZXByb19tb2RlID0gIkFzZXh1YWwiKQoKCiNzZXh1YWwKZW5mYV9oZXhfcGxvdChjaG9vX3NleHVhbF9kZiwgbWFyZyA9IE1hciwgc3BlYyA9IFNwZTEsIHJlcHJvX21vZGUgPSAiU2V4dWFsIikKCgojIyMgMikgRU5GQSBoaXN0b2dyYW0KI2FzZXh1YWwKaGlzdChjaG9vX2FzZXh1YWxfZW5mYSkKdGl0bGUobWFpbiA9ICJBc2V4dWFsIiwgYWRqID0gMC43LCBsaW5lID0gLTEyKQoKI3NleHVhbApoaXN0KGNob29fc2V4dWFsX2VuZmEpCnRpdGxlKG1haW4gPSAiU2V4dWFsIiwgYWRqID0gMC43LCBsaW5lID0gLTEyKQoKIyMjIDMpIFBDQSBvZiB0b3RhbCBlLXNwYWNlCnRvdGFsX2NsaW1hdGVfcGNhX3Bsb3QoYmdfZW52ID0gY2hvb19iZ19lbnYsIGxvY3MgPSBhc3RlX2xvYywgZ2VudXMgPSAiQ2xpdGFyY2h1cyIsIHNwZWNpZXMgPSAiaG9va2VyaSIpCgpgYGAKCiMjIyBNaWNyYXJjaHVzCmBgYHtyfQpzdW1tYXJ5Lmxpc3QubWljcmEgPC0gc3BlY2llc19wY2FfZnVuKGxvYy5jbGltLCAibWljcmFyY2h1cyIpCm1pY3JhX3Bsb3QgPC0gcGxvdF9jbGltX3BjYShzdW1tYXJ5Lmxpc3QubWljcmEkbG9jLmNsaW0sIHN1bW1hcnkubGlzdC5taWNyYSRzdW1tYXJ5LnBjYSwgZmFjdG9yID0gInJlcHJvZHVjdGl2ZV9tb2RlIikKbWljcmFfcGxvdAoKI2lmIHNlbGZjb250YWluZWQgPSBUUlVFLCB5b3UgY2FuIHJlbW92ZSB0aGUgZm9sZGVyIHRoYXQgZ2V0cyBhZGRlZCBhbG9uZ3NpZGUgdGhlIHBsb3QuIEl0J3MgYW4gYW5ub3lpbmcgYnVnIHRoYXQgaGFzbid0IGJlZW4gZml4ZWQgeWV0LgojaHRtbHdpZGdldHM6OnNhdmVXaWRnZXQobWljcmFfcGxvdCwgcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9taWNyYXJjaHVzX3BjYS5odG1sIiksIHNlbGZjb250YWluZWQgPSBUUlVFKQoKI2ZpbHRlciBsb2NhbGl0aWVzIGZvciB0aGUgZm9jYWwgZ2VudXMKbWljcmFfbG9jIDwtIGxvYyAlPiUgCiAgZmlsdGVyKGdlbnVzID09ICJtaWNyYXJjaHVzIikKICAKI3VzZSBzb3VyY2VkIHBsb3RfbG9jc19sZWFmbGV0IHNjcmlwdCB0byBwbG90IGxvY2FsaXRpZXMKbWljcmFfbWFwIDwtIHBsb3RfbG9jc19sZWFmbGV0KG1pY3JhX2xvYywgInJlcHJvZHVjdGl2ZV9tb2RlIikKCm1pY3JhX21hcAoKI2luIGNhc2UgSSB3YW50IHRvIHNhdmUgdGhlIG1hcCBzb21ld2hlcmUKI21hcHZpZXc6Om1hcHNob3QobWljcmFfbWFwLCB1cmwgPSBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL21pY3JhX21hcC5odG1sIiksIGZpbGUgPSBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL21pY3JhX21hcC5wZGYiKSkKYGBgCgoKYGBge3J9CnN1bW1hcnkubGlzdC5taWNyYSRzdW1tYXJ5LnBjYQpsb2FkaW5ncy5taWNyYSA8LSBzdW1tYXJ5Lmxpc3QubWljcmEkc3VtbWFyeS5wY2Ekcm90YXRpb24Ka25pdHI6OmthYmxlKHJvdW5kKGxvYWRpbmdzLm1pY3JhWywxOjNdLDMpKSAjVGFibGUgb2YgbG9hZGluZyBzY29yZXMgZm9yIHRoZSBmaXJzdCAzIFBDcy4gCmBgYAoKIyMjIE5pdmVhcGhhc21hCgpgYGB7cn0Kc3VtbWFyeS5saXN0Lm5pdmUgPC0gc3BlY2llc19wY2FfZnVuKGxvYy5jbGltLCAibml2ZWFwaGFzbWEiKQpuaXZlX3Bsb3QgPC0gcGxvdF9jbGltX3BjYShzdW1tYXJ5Lmxpc3Qubml2ZSRsb2MuY2xpbSwgc3VtbWFyeS5saXN0Lm5pdmUkc3VtbWFyeS5wY2EsIGZhY3RvciA9ICJyZXByb2R1Y3RpdmVfbW9kZSIpCgpuaXZlX3Bsb3QKCiNpZiBzZWxmY29udGFpbmVkID0gVFJVRSwgeW91IGNhbiByZW1vdmUgdGhlIGZvbGRlciB0aGF0IGdldHMgYWRkZWQgYWxvbmdzaWRlIHRoZSBwbG90LiBJdCdzIGFuIGFubm95aW5nIGJ1ZyB0aGF0IGhhc24ndCBiZWVuIGZpeGVkIHlldC4KI2h0bWx3aWRnZXRzOjpzYXZlV2lkZ2V0KG5pdmVfcGxvdCwgcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9uaXZlYXBoYXNtYV9wY2EuaHRtbCIpLCBzZWxmY29udGFpbmVkID0gVFJVRSkKCiNmaWx0ZXIgbG9jYWxpdGllcyBmb3IgdGhlIGZvY2FsIGdlbnVzCm5pdmVfbG9jIDwtIGxvYyAlPiUgCiAgZmlsdGVyKGdlbnVzID09ICJuaXZlYXBoYXNtYSIpCiAgCiN1c2Ugc291cmNlZCBwbG90X2xvY3NfbGVhZmxldCBzY3JpcHQgdG8gcGxvdCBsb2NhbGl0aWVzCm5pdmVfbWFwIDwtIHBsb3RfbG9jc19sZWFmbGV0KG5pdmVfbG9jLCAicmVwcm9kdWN0aXZlX21vZGUiKQoKbml2ZV9tYXAKCiNpbiBjYXNlIEkgd2FudCB0byBzYXZlIHRoZSBtYXAgc29tZXdoZXJlCiNtYXB2aWV3OjptYXBzaG90KG5pdmVfbWFwLCB1cmwgPSBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL25pdmVfbWFwLmh0bWwiKSwgZmlsZSA9IHBhc3RlMChnZXR3ZCgpLCAiL3Bsb3RzL3JlcHJvX21vZGVfcGxvdHMvbml2ZV9tYXAucGRmIikpCgpgYGAKCmBgYHtyfQpzdW1tYXJ5Lmxpc3Qubml2ZSRzdW1tYXJ5LnBjYQpsb2FkaW5ncy5uaXZlIDwtIHN1bW1hcnkubGlzdC5uaXZlJHN1bW1hcnkucGNhJHJvdGF0aW9uCmtuaXRyOjprYWJsZShyb3VuZChsb2FkaW5ncy5uaXZlWywxOjNdLDMpKSAjVGFibGUgb2YgbG9hZGluZyBzY29yZXMgZm9yIHRoZSBmaXJzdCAzIFBDcy4gCmBgYAoKCk5vdyBJJ20gZ29pbmcgdG8gdG8gZW52aXJvbm1lbnRhbCBuaWNoZSBmYWN0b3IgYW5hbHlzaXMgYmV0d2VlbiBzZXh1YWwgYW5kIGFzZXh1YWwgcG9wdWxhdGlvbnMgd2l0aGluIHRoZSBzcGVjaWVzLgpgYGB7cn0KI2dldCBiYWNrZ3JvdW5kIGVudid0IGZvciB0aGUgc3BlY2llcwpuaXZlX2JnX2VudiA8LSBiZ19lbnZfY3JvcChuaXZlX2xvYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZXMgPSAiYW5udWxhdGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCA9IHcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAwLjUpCgojZW5mYSBmb3IgdGhlIHNleHVhbCBzcGVjaWVzCm5pdmVfc2V4dWFsX2VuZmEgPC0gZW5mYV9jYWxjX2Z1bihsb2NzID0gbml2ZV9sb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2llcyA9ICJhbm51bGF0YSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcm9kdWN0aXZlX21vZGUgPSAic2V4dWFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX3Jhc3RlciA9IG5pdmVfYmdfZW52KQoKI2VuZmEgZm9yIHRoZSBhc2V4dWFsIHNwZWNpZXMKbml2ZV9hc2V4dWFsX2VuZmEgPC0gZW5mYV9jYWxjX2Z1bihsb2NzID0gbml2ZV9sb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZXMgPSAiYW5udWxhdGEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByb2R1Y3RpdmVfbW9kZSA9ICJhc2V4dWFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19yYXN0ZXIgPSBuaXZlX2JnX2VudikKCgojcGxvdCB0aGUgbWFyZ2luYWxpdHkgc2NvcmVzCm1hcmdpbmFsaXR5X2xvbGxpcG9wKHNleF9tYXJnID0gbml2ZV9zZXh1YWxfZW5mYSRtLCAKICAgICAgICAgICAgICAgICAgICBhc2V4X21hcmcgPSBuaXZlX2FzZXh1YWxfZW5mYSRtLAogICAgICAgICAgICAgICAgICAgIGZ1bGxfc3BlY2llc19uYW1lID0gIk5pdmVhcGhhc21hIGFubnVsYXRhIikKCmBgYAoKCkEgY291cGxlIGRpZmZlcmVudCB3YXlzIHRvIHZpc3VhbGl6ZSB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYXRpb24uIDEpIFNjYXR0ZXJwbG90IHZpc3VhbGl6YXRpb25zIG9mIG1hcmdpbmFsaXR5IHZzIGF4aXMgMSBvZiB0aGUgc3BlY2lhbGl6YXRpb24gd2l0aCB0aGUgbGFiZWxzIHJlbW92ZWQgKHRoZXkgbWFrZSB0aGluZ3MgaW5kaXNjZXJuYWJsZSkuIFJlZCA9IG9jY3VwaWVkIGUtc3BhY2UuIEdyYXkgPSBCYWNrZ3JvdW5kIGUtc3BhY2UuIDIpIEVORkEgaGlzdG9ncmFtIHZpc3VhbGl6YXRpb25zIG9mIG1hcmdpbmFsaXR5IGFuZCBzcGVjaWFsaXphdGlvbiBheGVzLiAzKSBQQ0Egb2YgdG90YWwgZS1zcGFjZSB3aXRoIGNvbG9ycyBjb3JyZXNwb25kaW5nIHRvIHNleHVhbCB2cy4gYXNleHVhbCBwb3B1bGF0aW9ucy4gCmBgYHtyfQojIyMgMSkgRU5GQSBzY2F0dGVycGxvdAojYWNjZXNzIHRoZSByZWxldmFudCB2YWx1ZXMgZm9yIHBsb3R0aW5nCm5pdmVfYXNleHVhbF9kZiA8LSBuaXZlX2FzZXh1YWxfZW5mYSRsaSAlPiUgCiAgYXNfdGliYmxlKCkgJT4lIAogIGJpbmRfY29scyhwciA9IG5pdmVfYXNleHVhbF9lbmZhJHByKQoKCm5pdmVfc2V4dWFsX2RmIDwtIG5pdmVfc2V4dWFsX2VuZmEkbGkgJT4lIAogIGFzX3RpYmJsZSgpICU+JSAKICBiaW5kX2NvbHMocHIgPSBuaXZlX3NleHVhbF9lbmZhJHByKQoKCiNhc2V4dWFsCmVuZmFfaGV4X3Bsb3Qobml2ZV9hc2V4dWFsX2RmLCBtYXJnID0gTWFyLCBzcGVjID0gU3BlMSwgcmVwcm9fbW9kZSA9ICJBc2V4dWFsIikKCgojc2V4dWFsCmVuZmFfaGV4X3Bsb3Qobml2ZV9zZXh1YWxfZGYsIG1hcmcgPSBNYXIsIHNwZWMgPSBTcGUxLCByZXByb19tb2RlID0gIlNleHVhbCIpCgoKIyMjIDIpIEVORkEgaGlzdG9ncmFtCiNhc2V4dWFsCmhpc3Qobml2ZV9hc2V4dWFsX2VuZmEpCnRpdGxlKG1haW4gPSAiQXNleHVhbCIsIGFkaiA9IDAuNywgbGluZSA9IC0xMikKCiNzZXh1YWwKaGlzdChuaXZlX3NleHVhbF9lbmZhKQp0aXRsZShtYWluID0gIlNleHVhbCIsIGFkaiA9IDAuNywgbGluZSA9IC0xMikKCiMjIyAzKSBQQ0Egb2YgdG90YWwgZS1zcGFjZQp0b3RhbF9jbGltYXRlX3BjYV9wbG90KGJnX2VudiA9IG5pdmVfYmdfZW52LCBsb2NzID0gbml2ZV9sb2MsIGdlbnVzID0gIk5pdmVhcGhhc21hIiwgc3BlY2llcyA9ICJhbm51bGF0YSIpCgpgYGAKCiMjIyBTcGlub3RlY3RhcmNodXMKCmBgYHtyfQpzdW1tYXJ5Lmxpc3Quc3BpbiA8LSBzcGVjaWVzX3BjYV9mdW4obG9jLmNsaW0sICJzcGlub3RlY3RhcmNodXMiKQpzcGluX3Bsb3QgPC0gcGxvdF9jbGltX3BjYShzdW1tYXJ5Lmxpc3Quc3BpbiRsb2MuY2xpbSwgc3VtbWFyeS5saXN0LnNwaW4kc3VtbWFyeS5wY2EsIGZhY3RvciA9ICJyZXByb2R1Y3RpdmVfbW9kZSIpCnNwaW5fcGxvdAoKI2lmIHNlbGZjb250YWluZWQgPSBUUlVFLCB5b3UgY2FuIHJlbW92ZSB0aGUgZm9sZGVyIHRoYXQgZ2V0cyBhZGRlZCBhbG9uZ3NpZGUgdGhlIHBsb3QuIEl0J3MgYW4gYW5ub3lpbmcgYnVnIHRoYXQgaGFzbid0IGJlZW4gZml4ZWQgeWV0LgojaHRtbHdpZGdldHM6OnNhdmVXaWRnZXQoc3Bpbl9wbG90LCBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL3NwaW5vdGVjdGFyY2h1c19wY2EuaHRtbCIpLCBzZWxmY29udGFpbmVkID0gVFJVRSkKCiNmaWx0ZXIgbG9jYWxpdGllcyBmb3IgdGhlIGZvY2FsIGdlbnVzCnNwaW5fbG9jIDwtIGxvYyAlPiUgCiAgZmlsdGVyKGdlbnVzID09ICJzcGlub3RlY3RhcmNodXMiKQogIAojdXNlIHNvdXJjZWQgcGxvdF9sb2NzX2xlYWZsZXQgc2NyaXB0IHRvIHBsb3QgbG9jYWxpdGllcwpzcGluX21hcCA8LSBwbG90X2xvY3NfbGVhZmxldChzcGluX2xvYywgInJlcHJvZHVjdGl2ZV9tb2RlIikKCnNwaW5fbWFwCgojaW4gY2FzZSBJIHdhbnQgdG8gc2F2ZSB0aGUgbWFwIHNvbWV3aGVyZQojbWFwdmlldzo6bWFwc2hvdChzcGluX21hcCwgdXJsID0gcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy9zcGluX21hcC5odG1sIiksIGZpbGUgPSBwYXN0ZTAoZ2V0d2QoKSwgIi9wbG90cy9yZXByb19tb2RlX3Bsb3RzL3NwaW5fbWFwLnBkZiIpKQpgYGAKCgpgYGB7cn0Kc3VtbWFyeS5saXN0LnNwaW4kc3VtbWFyeS5wY2EKbG9hZGluZ3Muc3BpbiA8LSBzdW1tYXJ5Lmxpc3Quc3BpbiRzdW1tYXJ5LnBjYSRyb3RhdGlvbgprbml0cjo6a2FibGUocm91bmQobG9hZGluZ3Muc3BpblssMTozXSwzKSkgI1RhYmxlIG9mIGxvYWRpbmcgc2NvcmVzIGZvciB0aGUgZmlyc3QgMyBQQ3MuIApgYGAKCgojIyMgVGVjdGFyY2h1cwpgYGB7cn0Kc3VtbWFyeS5saXN0LnRlY3QgPC0gc3BlY2llc19wY2FfZnVuKGxvYy5jbGltLCAidGVjdGFyY2h1cyIpCnRlY3RfcGxvdCA8LSBwbG90X2NsaW1fcGNhKHN1bW1hcnkubGlzdC50ZWN0JGxvYy5jbGltLCBzdW1tYXJ5Lmxpc3QudGVjdCRzdW1tYXJ5LnBjYSwgZmFjdG9yID0gInJlcHJvZHVjdGl2ZV9tb2RlIikKdGVjdF9wbG90CgojaWYgc2VsZmNvbnRhaW5lZCA9IFRSVUUsIHlvdSBjYW4gcmVtb3ZlIHRoZSBmb2xkZXIgdGhhdCBnZXRzIGFkZGVkIGFsb25nc2lkZSB0aGUgcGxvdC4gSXQncyBhbiBhbm5veWluZyBidWcgdGhhdCBoYXNuJ3QgYmVlbiBmaXhlZCB5ZXQuCiNodG1sd2lkZ2V0czo6c2F2ZVdpZGdldCh0ZWN0X3Bsb3QsIHBhc3RlMChnZXR3ZCgpLCAiL3Bsb3RzL3JlcHJvX21vZGVfcGxvdHMvdGVjdGFyY2h1c19wY2EuaHRtbCIpLCBzZWxmY29udGFpbmVkID0gVFJVRSkKCiNmaWx0ZXIgbG9jYWxpdGllcyBmb3IgdGhlIGZvY2FsIGdlbnVzCnRlY3RfbG9jIDwtIGxvYyAlPiUgCiAgZmlsdGVyKGdlbnVzID09ICJ0ZWN0YXJjaHVzIikKICAKI3VzZSBzb3VyY2VkIHBsb3RfbG9jc19sZWFmbGV0IHNjcmlwdCB0byBwbG90IGxvY2FsaXRpZXMKdGVjdF9tYXAgPC0gcGxvdF9sb2NzX2xlYWZsZXQodGVjdF9sb2MsICJyZXByb2R1Y3RpdmVfbW9kZSIpCgp0ZWN0X21hcAoKI2luIGNhc2UgSSB3YW50IHRvIHNhdmUgdGhlIG1hcCBzb21ld2hlcmUKI21hcHZpZXc6Om1hcHNob3QodGVjdF9tYXAsIHVybCA9IHBhc3RlMChnZXR3ZCgpLCAiL3Bsb3RzL3JlcHJvX21vZGVfcGxvdHMvdGVjdF9tYXAuaHRtbCIpLCBmaWxlID0gcGFzdGUwKGdldHdkKCksICIvcGxvdHMvcmVwcm9fbW9kZV9wbG90cy90ZWN0X21hcC5wZGYiKSkKYGBgCgoKYGBge3J9CnN1bW1hcnkubGlzdC50ZWN0JHN1bW1hcnkucGNhCmxvYWRpbmdzLnRlY3QgPC0gc3VtbWFyeS5saXN0LnRlY3Qkc3VtbWFyeS5wY2Ekcm90YXRpb24Ka25pdHI6OmthYmxlKHJvdW5kKGxvYWRpbmdzLnRlY3RbLDE6M10sMykpICNUYWJsZSBvZiBsb2FkaW5nIHNjb3JlcyBmb3IgdGhlIGZpcnN0IDMgUENzLiAKYGBgCgpOb3cgSSdtIGdvaW5nIHRvIHRvIGVudmlyb25tZW50YWwgbmljaGUgZmFjdG9yIGFuYWx5c2lzIGJldHdlZW4gc2V4dWFsIGFuZCBhc2V4dWFsIHBvcHVsYXRpb25zIHdpdGhpbiB0aGUgc3BlY2llcy4KClRoaXMgaXMgZm9yIFRlY3RhcmNodXMgb3ZvYmVzc3VzLgpgYGB7cn0KI2dldCBiYWNrZ3JvdW5kIGVudid0IGZvciB0aGUgc3BlY2llcwp0ZWN0X292b19iZ19lbnYgPC0gYmdfZW52X2Nyb3AodGVjdF9sb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWVzID0gIm92b2Jlc3N1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50ID0gdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IDAuNSkKCiNlbmZhIGZvciB0aGUgc2V4dWFsIHNwZWNpZXMKdGVjdF9vdm9fc2V4dWFsX2VuZmEgPC0gZW5mYV9jYWxjX2Z1bihsb2NzID0gdGVjdF9sb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2llcyA9ICJvdm9iZXNzdXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjdGl2ZV9tb2RlID0gInNleHVhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19yYXN0ZXIgPSB0ZWN0X292b19iZ19lbnYpCgojZW5mYSBmb3IgdGhlIGFzZXh1YWwgc3BlY2llcwp0ZWN0X292b19hc2V4dWFsX2VuZmEgPC0gZW5mYV9jYWxjX2Z1bihsb2NzID0gdGVjdF9sb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZXMgPSAib3ZvYmVzc3VzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcm9kdWN0aXZlX21vZGUgPSAiYXNleHVhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfcmFzdGVyID0gdGVjdF9vdm9fYmdfZW52KQoKCiNwbG90IHRoZSBtYXJnaW5hbGl0eSBzY29yZXMKbWFyZ2luYWxpdHlfbG9sbGlwb3Aoc2V4X21hcmcgPSB0ZWN0X292b19zZXh1YWxfZW5mYSRtLCAKICAgICAgICAgICAgICAgICAgICBhc2V4X21hcmcgPSB0ZWN0X292b19hc2V4dWFsX2VuZmEkbSwKICAgICAgICAgICAgICAgICAgICBmdWxsX3NwZWNpZXNfbmFtZSA9ICJUZWN0YXJjaHVzIG92b2Jlc3N1cyIpCgpgYGAKCgpBIGNvdXBsZSBkaWZmZXJlbnQgd2F5cyB0byB2aXN1YWxpemUgdGhlIGVudmlyb25tZW50YWwgdmFyaWF0aW9uLiAxKSBTY2F0dGVycGxvdCB2aXN1YWxpemF0aW9ucyBvZiBtYXJnaW5hbGl0eSB2cyBheGlzIDEgb2YgdGhlIHNwZWNpYWxpemF0aW9uIHdpdGggdGhlIGxhYmVscyByZW1vdmVkICh0aGV5IG1ha2UgdGhpbmdzIGluZGlzY2VybmFibGUpLiBSZWQgPSBvY2N1cGllZCBlLXNwYWNlLiBHcmF5ID0gQmFja2dyb3VuZCBlLXNwYWNlLiAyKSBFTkZBIGhpc3RvZ3JhbSB2aXN1YWxpemF0aW9ucyBvZiBtYXJnaW5hbGl0eSBhbmQgc3BlY2lhbGl6YXRpb24gYXhlcy4gMykgUENBIG9mIHRvdGFsIGUtc3BhY2Ugd2l0aCBjb2xvcnMgY29ycmVzcG9uZGluZyB0byBzZXh1YWwgdnMuIGFzZXh1YWwgcG9wdWxhdGlvbnMuIApgYGB7cn0KIyMjIDEpIEVORkEgc2NhdHRlcnBsb3QKI2FjY2VzcyB0aGUgcmVsZXZhbnQgdmFsdWVzIGZvciBwbG90dGluZwp0ZWN0X292b19hc2V4dWFsX2RmIDwtIHRlY3Rfb3ZvX2FzZXh1YWxfZW5mYSRsaSAlPiUgCiAgYXNfdGliYmxlKCkgJT4lIAogIGJpbmRfY29scyhwciA9IHRlY3Rfb3ZvX2FzZXh1YWxfZW5mYSRwcikKCgp0ZWN0X292b19zZXh1YWxfZGYgPC0gdGVjdF9vdm9fc2V4dWFsX2VuZmEkbGkgJT4lIAogIGFzX3RpYmJsZSgpICU+JSAKICBiaW5kX2NvbHMocHIgPSB0ZWN0X292b19zZXh1YWxfZW5mYSRwcikKCgojYXNleHVhbAplbmZhX2hleF9wbG90KHRlY3Rfb3ZvX2FzZXh1YWxfZGYsIG1hcmcgPSBNYXIsIHNwZWMgPSBTcGUxLCByZXByb19tb2RlID0gIkFzZXh1YWwiKQoKCiNzZXh1YWwKZW5mYV9oZXhfcGxvdCh0ZWN0X292b19zZXh1YWxfZGYsIG1hcmcgPSBNYXIsIHNwZWMgPSBTcGUxLCByZXByb19tb2RlID0gIlNleHVhbCIpCgoKIyMjIDIpIEVORkEgaGlzdG9ncmFtCiNhc2V4dWFsCmhpc3QodGVjdF9vdm9fYXNleHVhbF9lbmZhKQp0aXRsZShtYWluID0gIkFzZXh1YWwiLCBhZGogPSAwLjcsIGxpbmUgPSAtMTIpCgojc2V4dWFsCmhpc3QodGVjdF9vdm9fc2V4dWFsX2VuZmEpCnRpdGxlKG1haW4gPSAiU2V4dWFsIiwgYWRqID0gMC43LCBsaW5lID0gLTEyKQoKIyMjIDMpIFBDQSBvZiB0b3RhbCBlLXNwYWNlCnRvdGFsX2NsaW1hdGVfcGNhX3Bsb3QoYmdfZW52ID0gdGVjdF9vdm9fYmdfZW52LCBsb2NzID0gdGVjdF9sb2MsIGdlbnVzID0gIlRlY3RhcmNodXMiLCBzcGVjaWVzID0gIm92b2Jlc3N1cyIpCgpgYGAKCgpUaGlzIGlzIGFuIGVuZmEgZm9yIFRlY3RhcmNodXMgaHV0dG9uaS4KYGBge3J9CiMjI09ubHkgbmVlZCB0byBnZXQgYmcgZW52J3QgaWYgeW91J3JlIG5vdCBydW5uaW5nIHRoZSBwcmV2aW91cyBjaHVuawojZ2V0IGJhY2tncm91bmQgZW52J3QgZm9yIHRoZSBzcGVjaWVzCnRlY3RfaHV0dF9iZ19lbnYgPC0gYmdfZW52X2Nyb3AodGVjdF9sb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWVzID0gImh1dHRvbmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCA9IHcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAwLjUpCgojZW5mYSBmb3IgdGhlIHNleHVhbCBzcGVjaWVzCnRlY3RfaHV0dF9zZXh1YWxfZW5mYSA8LSBlbmZhX2NhbGNfZnVuKGxvY3MgPSB0ZWN0X2xvYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWVzID0gImh1dHRvbmkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjdGl2ZV9tb2RlID0gInNleHVhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19yYXN0ZXIgPSB0ZWN0X2h1dHRfYmdfZW52KQoKI2VuZmEgZm9yIHRoZSBhc2V4dWFsIHNwZWNpZXMKdGVjdF9odXR0X2FzZXh1YWxfZW5mYSA8LSBlbmZhX2NhbGNfZnVuKGxvY3MgPSB0ZWN0X2xvYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2llcyA9ICJodXR0b25pIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcm9kdWN0aXZlX21vZGUgPSAiYXNleHVhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfcmFzdGVyID0gdGVjdF9odXR0X2JnX2VudikKCgojcGxvdCB0aGUgbWFyZ2luYWxpdHkgc2NvcmVzCm1hcmdpbmFsaXR5X2xvbGxpcG9wKHNleF9tYXJnID0gdGVjdF9odXR0X3NleHVhbF9lbmZhJG0sIAogICAgICAgICAgICAgICAgICAgIGFzZXhfbWFyZyA9IHRlY3RfaHV0dF9hc2V4dWFsX2VuZmEkbSwKICAgICAgICAgICAgICAgICAgICBmdWxsX3NwZWNpZXNfbmFtZSA9ICJUZWN0YXJjaHVzIGh1dHRvbmkiKQoKYGBgCgpBIGNvdXBsZSBkaWZmZXJlbnQgd2F5cyB0byB2aXN1YWxpemUgdGhlIGVudmlyb25tZW50YWwgdmFyaWF0aW9uLiAxKSBTY2F0dGVycGxvdCB2aXN1YWxpemF0aW9ucyBvZiBtYXJnaW5hbGl0eSB2cyBheGlzIDEgb2YgdGhlIHNwZWNpYWxpemF0aW9uIHdpdGggdGhlIGxhYmVscyByZW1vdmVkICh0aGV5IG1ha2UgdGhpbmdzIGluZGlzY2VybmFibGUpLiBSZWQgPSBvY2N1cGllZCBlLXNwYWNlLiBHcmF5ID0gQmFja2dyb3VuZCBlLXNwYWNlLiAyKSBFTkZBIGhpc3RvZ3JhbSB2aXN1YWxpemF0aW9ucyBvZiBtYXJnaW5hbGl0eSBhbmQgc3BlY2lhbGl6YXRpb24gYXhlcy4gMykgUENBIG9mIHRvdGFsIGUtc3BhY2Ugd2l0aCBjb2xvcnMgY29ycmVzcG9uZGluZyB0byBzZXh1YWwgdnMuIGFzZXh1YWwgcG9wdWxhdGlvbnMuCmBgYHtyfQojIyMgMSkgRU5GQSBzY2F0dGVycGxvdAojYWNjZXNzIHRoZSByZWxldmFudCB2YWx1ZXMgZm9yIHBsb3R0aW5nCnRlY3RfaHV0dF9hc2V4dWFsX2RmIDwtIHRlY3RfaHV0dF9hc2V4dWFsX2VuZmEkbGkgJT4lIAogIGFzX3RpYmJsZSgpICU+JSAKICBiaW5kX2NvbHMocHIgPSB0ZWN0X2h1dHRfYXNleHVhbF9lbmZhJHByKQoKCnRlY3RfaHV0dF9zZXh1YWxfZGYgPC0gdGVjdF9odXR0X3NleHVhbF9lbmZhJGxpICU+JSAKICBhc190aWJibGUoKSAlPiUgCiAgYmluZF9jb2xzKHByID0gdGVjdF9odXR0X3NleHVhbF9lbmZhJHByKQoKCiNhc2V4dWFsCmVuZmFfaGV4X3Bsb3QodGVjdF9odXR0X2FzZXh1YWxfZGYsIG1hcmcgPSBNYXIsIHNwZWMgPSBTcGUxLCByZXByb19tb2RlID0gIkFzZXh1YWwiKQoKCiNzZXh1YWwKZW5mYV9oZXhfcGxvdCh0ZWN0X2h1dHRfc2V4dWFsX2RmLCBtYXJnID0gTWFyLCBzcGVjID0gU3BlMSwgcmVwcm9fbW9kZSA9ICJTZXh1YWwiKQoKCiMjIyAyKSBFTkZBIGhpc3RvZ3JhbQojYXNleHVhbApoaXN0KHRlY3RfaHV0dF9hc2V4dWFsX2VuZmEpCnRpdGxlKG1haW4gPSAiQXNleHVhbCIsIGFkaiA9IDAuNywgbGluZSA9IC0xMikKCiNzZXh1YWwKaGlzdCh0ZWN0X2h1dHRfc2V4dWFsX2VuZmEpCnRpdGxlKG1haW4gPSAiU2V4dWFsIiwgYWRqID0gMC43LCBsaW5lID0gLTEyKQoKIyMjIDMpIFBDQSBvZiB0b3RhbCBlLXNwYWNlCnRvdGFsX2NsaW1hdGVfcGNhX3Bsb3QoYmdfZW52ID0gdGVjdF9odXR0X2JnX2VudiwgbG9jcyA9IHRlY3RfbG9jLCBnZW51cyA9ICJUZWN0YXJjaHVzIiwgc3BlY2llcyA9ICJodXR0b25pIikKCmBgYAoKIyMjIFRlcGFraXBoYXNtYQpOb3RoaW5nLiBPbmx5IG9uZSBsb2NhbGl0eS4KCg==